首页 > 解决方案 > MVC5 不显眼的验证不起作用

问题描述

我正在使用具有数据库优先方法的实体框架。

我为验证创建了单独的类。

[MetadataType(typeof(RoleMetaData))]
    public partial class Role
    {

    }

    class RoleMetaData
    {
        [Required(ErrorMessage = "Please enter role name")]
        public string Name { get; set; }
    }

和我的html表单:

@using (Html.BeginForm("Create", "Role", FormMethod.Post, new {  @class = "submitform" }))
{
 @Html.TextBoxFor(x => x.Name, new { @class="form-control" })
<input type="submit" class="btn btn-success width-150" value="Save" />
}

但是没有任何 data-* 属性的 html 渲染到浏览器,例如:

<input class="form-control" id="Name" name="Name"  type="text" value="">

我想知道为什么它不呈现 data-* 属性。

请指导我做错了什么。

谢谢。

标签: asp.net-mvc-5entity-framework-6unobtrusive-validation

解决方案


您需要使用 ValidationMessageFor 来呈现 data-* 属性以进行非干扰验证。使用 ValidationMessageFor 如下:

 @using (Html.BeginForm("Create", "Role", FormMethod.Post, new {  @class = "submitform" }))
    {
     @Html.TextBoxFor(x => x.Name, new { @class="form-control" })
     @Html.ValidationMessageFor(x => x.Name, "", new { @class = "text-danger" })
    <input type="submit" class="btn btn-success width-150" value="Save" />
    }

并确保在 web.config 中启用客户端验证,如下所示:

<configuration>
  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
</configuration>

推荐阅读