ASP.MVC客户端验证不起作用

时间:2013-06-06 07:52:14

标签: asp.net-mvc validation client-side unobtrusive-validation

我正在尝试验证登录页面上的用户输入。 我有User mode

  • string UserName
  • string Password

我决定用部分类扩展我的数据库模型:

[MetadataType(typeof(User))]
public partial class User : IUser
{

}

public interface IUser
{
    [Required(ErrorMessage = "Login is required")]
    string UserName { get; set; }

    [Required(ErrorMessage = "Password is required")]
    string Password { get; set; }
}

我的view

   @using (Html.BeginForm("Login", "Account", FormMethod.Post))
   {
      @Html.ValidationSummary(true)      
      @Html.TextBoxFor(model => model.UserName, new { size = 30, @placeholder = "Login",    
      @class = "credential" })
      @Html.ValidationMessageFor(model => model.UserName)
      @Html.PasswordFor(model => model.Password, new { size = 30, @placeholder = 
   "Password",    @class = "credential" })
      @Html.ValidationMessageFor(model => model.Password)
   }

而不是客户端验证,它会在模型​​中对空值进行回发和崩溃。

关注this question我添加了

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

到视图顶部,确保加载脚本:

<script src="@Url.Content("~/Scripts/jquery-1.8.3.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

我错过了什么?

1 个答案:

答案 0 :(得分:1)

似乎与您在接口属性而不是类属性上进行验证有关。

检查DOM元素。对于用户名,它应该如下所示:

<input class="credential" data-val="true" data-val-required="Login is required" id="UserName" name="UserName" placeholder="Login" size="30" type="text" value="">

注意data-val&amp; data-val-required属性。这些由js验证逻辑使用。

当我尝试使用您的界面属性验证时,会遗漏这些内容。

也许您应该为此而不是模型使用viewmodel?这样你就可以根据视图要求进行定制。

修改

实际上,只需在剃刀视图中创建@model声明即可引用IUser而不是User。

@model IUser