【问题标题】:ASP.MVC client side validation does not workASP.MVC 客户端验证不起作用
【发布时间】:2013-06-06 07:52:13
【问题描述】:

我正在尝试验证登录页面上的用户输入。 我有我的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)
   }

它不是客户端验证,而是回发并在模型中的 null 值上崩溃。

关注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>

我错过了什么?

【问题讨论】:

  • 你的浏览器有错误吗?
  • 没有任何错误,它在Model.Designer.cs 崩溃并且没有通过ModelState.IsValid
  • @shahrooz-jefri,谢谢,我去看看

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


【解决方案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

【讨论】:

  • 使用模型它在其他视图上工作正常,通过接口添加验证而不是创建视图模型似乎是合乎逻辑的。我的输入没有data-valdata-val-required,所以是的,你是对的)谢谢你有没有尝试提供接口验证(除了我的接口)?也许我在这方面遗漏了一些东西
  • 不,我从不使用接口验证。原因是我从不在视图上使用模型。我使用视图模型。对我来说,使用 ViewModel 方法更有意义,因为我们可以在其上引入视图逻辑 - 因此验证、包含下拉项目的集合等。这些不会真正出现在模型上,因为它更关心业务逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2013-01-09
  • 2014-03-25
  • 1970-01-01
相关资源
最近更新 更多