MVC5 不显眼的验证不起作用

MVC5 unobtrusive validations not working

我正在使用 entity framework 数据库优先方法。

我已经为验证创建了单独的 class。

[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" />
}

但 html 渲染到浏览器时没有任何数据-* 属性,例如:

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

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

请指导我做错了什么。

谢谢。

您需要使用 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>

我找到了问题所在,我验证的命名空间 class 与数据实体所在的命名空间不同。