2013-11-23 64 views
4

至于我知道,似乎微软使用jQuery验证属性作为表单输入属性的默认值。ASP.NET MVC 5和HTML 5根据W3C规范形成属性

是否可以配置我的应用程序,所以如果我加入Required属性和使用@Html.EditorFor(x => Model)形式将使用required属性,而不是data-val-required渲染渲染我的形式?还是我不得不为所有标准类型编写我自己的EditorTemplates

+0

不一样,但在SO问题下面,表单将使用Html属性呈现“Required”。相当手动的方法,虽然http://stackoverflow.com/questions/6788231/mvc3-adding-css-class-based-on-model-attributes – Spock

+0

你可以关闭jQuery验证你想要的元素,然后提供html5属性thr。注意数据属性是HTML5的一部分.. –

回答

9

如果你想在你的web.config禁用不显眼的客户端验证以取代ASP.NET MVC使用的标准data-*验证属性,你应该开始:

<add key="ClientValidationEnabled" value="false" /> 

这将防止HTML辅助发光,从他们在你的输入字段。

然后,您可以编写标准类型的自定义编辑器模板。例如,对于字符串,这将是~/Views/Shared/editorTemplates/String.cshtml

@{ 
    var attributes = new Dictionary<string, object>(); 
    attributes["class"] = "text-box single-line"; 
    if (ViewData.ModelMetadata.IsRequired) 
    { 
     attributes["required"] = "required"; 
    } 
} 

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, attributes) 

而这几乎是它。现在,每次你做一个Html.EditorFor(x => x.Foo)其中Foo是一个字符串属性,将产生以下标记:

<input class="text-box single-line" id="Foo" name="Foo" required="required" type="text" value="" /> 

另外值得一提的是,如果你不希望禁用不显眼的客户端验证,并为您的整个的data-*属性应用程序,但只适用于单个表单,你可以这样做:

@using (Html.BeginForm()) 
{ 
    this.ViewContext.ClientValidationEnabled = false; 
    @Html.EditorFor(x => x.Foo) 
} 
+0

好吧,我明白了。谢谢! – Marcus

+0

@darindimitrov先生,您能否给我建议,可能是HTML5约束表单验证的原因在我的mvc 5网站中不起作用。那么,实际上它有点工作,但没有警告信息显示。我一直在寻找三天的解决方案:( –