簡體   English   中英

MVC 4下拉驗證

[英]MVC 4 Dropdown validation

好,這真讓我發瘋。 我有一個MVC 4網站,該網站正在驗證客戶端上的文本框,而不是下拉列表。

我的(縮減)模型如下所示:

[Required]
public int? FabricOptionSelected { get; set; }
public List<SelectListItem> FabricOptions { get; private set; }

我的(縮減)控制器如下所示:

model.FabricOptions.AddRange(product.Options
.Where(a=>a.ProductOptionCategory == Domain.Products.ProductOptionCategory.Fabric)
.ToSelectList( m => m.Name, m => m.Id.ToString(), "-- Select --"));

我的(縮小的)視圖如下所示:

@if (Model.FabricOptions.Count > 1)
    {
        <div class="row form-group">
            <div class="col-xs-2 control-label">Fabric</div>
            <div class="col-xs-4">@Html.DropDownListFor(m => m.FabricOptionSelected, Model.FabricOptions, new { @class = "form-control" })</div>
            <div class="col-xs-6">@Html.ValidationMessageFor(m => m.FabricOptionSelected)</div>
        </div>
    }

我的捆綁包配置中包含“〜/ Scripts / jquery.validate.js”和“〜/ Scripts / jquery.validate.unobtrusive.js”,而web.config具有:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

在“設置”部分中。

Chrome控制台未顯示任何錯誤,並且在被觸發的頁面下方還有一個帶有Required屬性的文本框。

.ToSelectList是擴展方法:

public static List<SelectListItem> ToSelectList<T>
        (this IEnumerable<T> enumerable, 
        Func<T, string> text, 
        Func<T, string> value, 
        string defaultOption)
    {
        var items = enumerable.Select(f => new SelectListItem() { Text = text(f), Value = value(f) }).ToList();
        items.Insert(0, new SelectListItem() { Text = defaultOption, Value = "-1" });
        return items;
    } 

無法弄清楚為什么視圖中的客戶端驗證沒有觸發下拉菜單。 我認為我遺漏了一些明顯的東西,但確實可以做到這一點。

確保.ToSelectList (這是你添加一個擴展?)設置默認-- Select --null 將其設置為可為null的類型是一個好的開始,但是必須為null才能使Required正常工作。

您的擴展方法正在插入一個“ default”選項,該選項的value="-1"int有效,因此不會出現錯誤。 您可以使用MVC中已經可用的方法來實現所需的目標

模型

[Required]
public int? FabricOptionSelected { get; set; }
public SelectList FabricOptions { get; set; }

控制者

var option = product.Options.Where(a=>a.ProductOptionCategory == Domain.Products.ProductOptionCategory.Fabric);
model.FabricOptions = new SelectList(options, "ID", "Name");

視圖

@Html.DropDownListFor(m => m.FabricOptionSelected, Model.FabricOptions, "-- Select --", new { @class = "form-control" })

第三個參數將<select>的第一個選項呈現為<option value>--Select--</option>即沒有值,因此如果選擇了該值,則為int? FabricOptionSelected int? FabricOptionSelected將為null ,因此由於[Required]屬性而導致驗證失敗

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM