我正在尝试验证登录页面上的用户输入。
我有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)
}
而不是客户端验证,它会在模型中对空值进行回发和崩溃。
关注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>
我错过了什么?
答案 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