代码之家  ›  专栏  ›  技术社区  ›  user2517610

MVC5非干扰性验证不起作用

  •  0
  • user2517610  · 技术社区  · 7 年前

    我使用的是实体框架和数据库优先方法。

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

    [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="">
    

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

    请告诉我我做错了什么。

    谢谢。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Sumit Bhattarai    7 年前

    您需要使用validationmessagefor呈现数据-*属性以进行不可靠的验证。使用validationmessage进行如下操作:

     @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>
    
        2
  •  0
  •   user2517610    7 年前

    我发现问题出在哪里,验证类的名称空间与存在数据实体的名称空间不同。