2

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

  • 字符串用户名
  • 字符串密码

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

[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)
   }

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

这个问题之后我添加了

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>

我错过了什么?

4

1 回答 1

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 和 data-val-required 属性。这些由 js 验证逻辑使用。

当我尝试使用您的接口属性验证时,这些都丢失了。

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

编辑

实际上,只需在 razor 视图中声明 @model 以引用 IUser 而不是 User。

@model IUser
于 2013-06-06T08:23:34.303 回答