为什么使用原始表单标记而不是使用(Html.BeginForm)来破坏客户端验证

时间:2011-12-20 17:16:59

标签: asp.net-mvc jquery-validate

我发现用常规<form>标签替换@using(Html.BeginForm)后,客户端验证失败了。 当我查看源代码时,除了重新排序标记之外,html输出是相同的。 为什么这会阻止客户端验证工作?

1 个答案:

答案 0 :(得分:0)

因为当你调用Html.BeginForm时,它会设置一个表单上下文变量,该变量的作用是在生成相应的输入字段时,诸如TextBoxFor,CheckBoxFor,...等助手会发出HTML5 data- *属性。例如,尝试使用其中一个没有表单的帮助程序,您将看到输入没有客户端验证使用的任何HTML5 data- *属性。

您可以通过手动创建表单上下文来作弊:

@{ViewContext.FormContext = new FormContext();}
<form ....>
    @Html.EditorFor(x => x.Foo)
    <button type="submit">OK</button>
</form>

但是,嘿,为什么你需要手动硬编码一个表单而不是使用相应的帮助器来处理正确生成网址,方法,编码......?