MVCvalidation数据注释未呈现正确的HTML5属性

我试图理解为什么我的MVC数据注释没有呈现HTML 5必需标记。 我认为问题是HTML5和MVC相关而不是JQueryvalidation。

根据这里的文档,它支持所有的浏览器,但我开发的三个,IE,Chrome,Firefox都没有渲染属性?

我认为我的场景非常简单。

MVC控制器填充模型然后传递给视图。 用户完成字段并单击提交。 validation即使字段留空,也会一直通过? 模型状态无效,因此控制器将其恢复,但我希望客户端validation能够捕获空字段。 我有一个jsfiddle来演示,但首先让我提供模型。

public partial class FinRecordModel { [Required] public virtual string FinName { get; set; } [Required] public virtual string PageLocation { get; set; } } 

风景:

  @Html.LabelFor(model => model.FinName):   @Html.EditorFor(model => model.FinName) @Html.ValidationMessageFor(model => model.FinName)     @Html.LabelFor(model => model.PageLocation):   @Html.EditorFor(model => model.PageLocation) @Html.ValidationMessageFor(model => model.PageLocation)  

我创建了这个jsfiddle,使用浏览器呈现的html,validation总是通过。

http://jsfiddle.net/ramjet/mo0v2b76/5/

现在,如果我在这个jsfiddle中添加所需的属性,那么一切都按预期工作,所以只是想知道发生了什么?

http://jsfiddle.net/ramjet/mo0v2b76/6/

如果这是HTML5 / MVC愚蠢,因为新的HTML标准仍然被整合到网络中,那么也许我应该使用jquery将文件onload函数添加到输入字段中所需的属性?

感谢您的意见和建议。

标准html帮助程序使用与jquery.validate.unobtrusive关联的用于客户端validation的data-xxx属性,因此它不呈现required属性。 如果你需要这个用于其他validation插件,你可以使用助手的重载来添加html属性

 @Html.TextBoxFor(m => m.FinName, new { required = "required" }) 

请注意,如果不使用jquery.validate.unobtrusive ,则可以在web.config文件jquery.validate.unobtrusive其关闭,以便不创建data-xxx属性。

   

或在控制器级别

 HtmlHelper.ClientValidationEnabled = false; HtmlHelper.UnobtrusiveJavaScriptEnabled = false; 

实际上,当您将数据注释附加到模型时,辅助类@ Html.ValidationMessageFor(//)可以正常工作。 如果使用辅助类进行validation,则需要/必须使用注释来满足不同的validation。 如果您刚刚使用了辅助类,即@ Html.ValidationMessageFor(//),并且未在模型上使用注释标记,那么jqueryvalidation默认情况下不会呈现任何validation。

因此,当您在模型上使用所需的validation时,使用带有必需属性的输入标记呈现新视图(您还可以在源代码中检查这一点,在模型中附加所需的注释标记后,新页面具有带必需属性的输入标记)。

基本上,注释标签只是HTML 5支持的不同validation属性。 您在模型中使用它们,ASP.Net Server将它们呈现为客户端输入标记validation属性,并将生成的HTML发送到客户端。

是的,您也可以使用jquery onload方法添加所需的属性,但如果您使用的是MVC / C#组合,请使用注释标签,因为这是建议。