太多人告诉我应用required
课程来填补所需的字段。我不想要好的'required
属性;我想要新的属性集进行验证。这是我试过没有成功的原因:
这是我的编辑模板:
@using Comair.RI.UI.Core
@{
var list = this.GetModelSelectList();
var listWithSelected = new SelectList(list.Items, list.DataValueField, list.DataTextField, Model);
}
@if (ViewData.ModelMetadata.IsRequired)
{
//var att = "data-val-required=\"string.Format("The {0} field is required", ViewData.ModelMetadata.DisplayName)
var att = string.Format("The {0} field is required.", ViewData.ModelMetadata.DisplayName);
@Html.DropDownListFor(m => Model, listWithSelected, " - select - ",
new Dictionary<string, object> {{"data-val-number=", "The field " + ViewData.ModelMetadata.DisplayName + " must be a number."}, {"data-val", true}, {"data-val-required", att}})
}
答案 0 :(得分:1)
使用所需的验证属性简单地修饰相应的视图模型属性。例如:
public class Core
{
[Required]
public int? Id { get; set; }
}
然后:
@using Comair.RI.UI.Core
@{
var list = this.GetModelSelectList();
var listWithSelected = new SelectList(list.Items, list.DataValueField, list.DataTextField, Model);
}
@if (ViewData.ModelMetadata.IsRequired)
{
@Html.DropDownListFor(m => m.Id, listWithSelected, " - select - ")
}
另请注意,传递给DropDownListFor
帮助器的第一个参数必须表示指向简单标量属性类型(例如整数或字符串)的lambda表达式。这就是为什么在我的示例中我已经说明了如何将Required属性应用于视图模型上的相应Id属性,然后简单地将DropDownList绑定到它。然后帮助程序将生成所有必要的属性,以便进行不显眼的验证。在您的示例中,您将下拉列表绑定到具有m => Model
的模型,该模型首先是一个不正确的lambda表达式,因为您从外部捕获Model
值,更糟糕的是它是一个复杂类型,不是很与助手兼容。
你应该注意一件事。如果未在表单(Html.BeginForm
或Ajax.BeginForm
)内调用此模板,则帮助程序将不会发出客户端验证属性,例如data-required
等。您可以通过实例化FormContext(如果不存在)来解决此问题:
@if (ViewContext.FormContext == null)
{
ViewContext.FormContext = new FormContext();
}
@Html.DropDownListFor(m => m.Id, listWithSelected, " - select - ")
这将确保帮助程序始终发出验证属性。