第一个html助手生成客户端validation属性,而第二个没有

假设我有这个模型:

public class Person { public bool IsApproved { get; set; } } 

并且这个代码,我试图用check类型呈现input

 @Html.CheckBoxFor(x => x.IsApproved) @Html.CheckBox("IsApproved") 

但是,结果是不同的:

 // CheckBoxFor result   // CheckBox result   

如何以及为什么 ,第一个生成客户端validation的属性,而另一个没有?

更新:

交换@Html.CheckBoxFor@Html.CheckBox的顺序后,标记元素的顺序没有改变。

CheckBox()帮助器不呈现data-val属性,因为表单已经为同一属性呈现了CheckBoxFor() 。 如果交换顺序,将为CheckBox() (而不是CheckBoxFor() )呈现data-val属性。

我的理解是,在解析表单时,这将导致jquery.validation.unobtrusive的潜在(重复)问题。

控件的html帮助器在内部调用HtmlHelperGetUnobtrusiveValidationAttributes()方法。 从源代码 (我的重点)

如果启用了不显眼的客户端validation,则仅渲染属性, 然后仅当我们从未在此表单中为具有此名称的字段提供validation时 。 此外,如果没有表单上下文,那么我们无法呈现属性(我们没有将它们附加到)

 public IDictionary GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata) {