[英]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.