第一个 html 帮助程序生成客户端验证属性,而第二个则不
First html helper generates client-side validation attributes, while the second one doesn't
假设我有这个模型:
public class Person
{
public bool IsApproved { get; set; }
}
我正在尝试使用 check
类型渲染 input
并编写此代码:
@Html.CheckBoxFor(x => x.IsApproved)
@Html.CheckBox("IsApproved")
但是,结果不一样:
// CheckBoxFor result
<input data-val="true" data-val-required="The IsApproved field is required." id="IsApproved" name="IsApproved" type="checkbox" value="true">
<input name="IsApproved" type="hidden" value="false">
// CheckBox result
<input id="IsApproved" name="IsApproved" type="checkbox" value="true">
<input name="IsApproved" type="hidden" value="false">
如何以及为什么,第一个生成用于客户端验证的属性,而另一个没有?
更新:
交换 @Html.CheckBoxFor
和 @Html.CheckBox
的顺序后,标记元素的顺序没有改变。
CheckBox()
帮助程序不会呈现 data-val
属性,因为表单已经呈现 CheckBoxFor()
相同的 属性。如果交换顺序,data-val
属性将呈现为 CheckBox()
(而不是 CheckBoxFor()
)。
我的理解是,这会导致 jquery.validation.unobtrusive 在解析表单时出现潜在(重复)问题。
控件的 html 助手在内部调用 HtmlHelper
的 GetUnobtrusiveValidationAttributes()
方法。 From the source code(我强调)
Only render attributes if unobtrusive client-side validation is enabled, and then only if we've never rendered validation for a field with this name in this form. Also, if there's no form context, then we can't render the attributes (we'd have no to attach them to)
public IDictionary<string, object> GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata)
{
假设我有这个模型:
public class Person
{
public bool IsApproved { get; set; }
}
我正在尝试使用 check
类型渲染 input
并编写此代码:
@Html.CheckBoxFor(x => x.IsApproved)
@Html.CheckBox("IsApproved")
但是,结果不一样:
// CheckBoxFor result
<input data-val="true" data-val-required="The IsApproved field is required." id="IsApproved" name="IsApproved" type="checkbox" value="true">
<input name="IsApproved" type="hidden" value="false">
// CheckBox result
<input id="IsApproved" name="IsApproved" type="checkbox" value="true">
<input name="IsApproved" type="hidden" value="false">
如何以及为什么,第一个生成用于客户端验证的属性,而另一个没有?
更新:
交换 @Html.CheckBoxFor
和 @Html.CheckBox
的顺序后,标记元素的顺序没有改变。
CheckBox()
帮助程序不会呈现 data-val
属性,因为表单已经呈现 CheckBoxFor()
相同的 属性。如果交换顺序,data-val
属性将呈现为 CheckBox()
(而不是 CheckBoxFor()
)。
我的理解是,这会导致 jquery.validation.unobtrusive 在解析表单时出现潜在(重复)问题。
控件的 html 助手在内部调用 HtmlHelper
的 GetUnobtrusiveValidationAttributes()
方法。 From the source code(我强调)
Only render attributes if unobtrusive client-side validation is enabled, and then only if we've never rendered validation for a field with this name in this form. Also, if there's no form context, then we can't render the attributes (we'd have no to attach them to)
public IDictionary<string, object> GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata)
{