我想知道根据放置在 ViewModel 字段上的属性处理客户端、javascript 或 jQuery 驱动的 MVC4 字段验证的最佳方法是什么。
首先,让我们选择示例。应用程序首次启动时显示的管理员登录创建屏幕(只是不告诉站点所有者“第一次使用 admin/admin 作为登录名”)。
View 模型:
public class AdministratorViewModel : AbstractViewModel
{
[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblUsername")]
public string Username { get; set; }
[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblEmailAddress")]
[EmailAddress]
public string EmailAddress { get; set; }
[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblPassword")]
[AdminPassword]
public string Password { get; set; }
[Required]
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblPasswordConfirm")]
[Compare("Password")]
public string PasswordConfirm { get; set; }
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblLastLogin")]
public DateTime? LastLogin { get; set; }
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblPasswordExpiry")]
public DateTime? PasswordExpiry { get; set; }
[Display(ResourceType = typeof(ManageAdminsViewModelResources), Name = "lblBlocked")]
public bool Blocked { get; set; }
}
部分 View (创建第一个管理员时只需要几个字段)
@using (Html.BeginForm())
{
@Html.ValidationSummary(false)
@Html.AntiForgeryToken()
<fieldset>
<legend>@ManageAdminsViewResources.legendCreateAdmin</legend>
<div class="desktoptile">
@Html.LabelFor(m=>m.Username)
@Html.EditorFor(m => m.Username)
@Html.ValidationMessageFor(m => m.Username)
</div>
<div class="desktoptile">
@Html.LabelFor(m=>m.Password)
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="desktoptile">
@Html.LabelFor(m=>m.PasswordConfirm)
@Html.PasswordFor(m => m.PasswordConfirm)
@Html.ValidationMessageFor(m => m.PasswordConfirm)
</div>
<div class="desktoptile">
@Html.LabelFor(m=>m.EmailAddress)
@Html.EditorFor(m => m.EmailAddress)
@Html.ValidationMessageFor(m => m.EmailAddress)
</div>
<input type="submit" value="@ManageAdminsViewResources.btnCreate"/>
</fieldset>
}
Controller
[AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateFirst(AdministratorViewModel viewModel)
{
if (!ModelState.IsValid) return View(viewModel);
[...................]
目前
如果我在表单中输入了无效的电子邮件地址、空密码等并点击提交,我正确收到错误通知。好的,我们继续
我想要什么
因为我正在做一个 Metro 风格的设计,所以我希望每次用户取消焦点时都会对该字段进行文本框验证。
编写硬编码的 jQuery 片段并不是最好的选择。我想要一种数据驱动的方法,可能嵌入到我目前正在学习的 MVC4 中。
因此,给定一个具有标准 和 自定义属性的 ViewModel(为此,无论如何,都需要一点 Javascript,想想 Org.Zighinetto.AdminPasswordAttribute
检查密码的复杂性),我如何以最不显眼的方式执行客户端验证,而无需在每个 html 标记上指定客户端标记并编写尽可能少的代码?
我必须取消隐藏的 ASP.NET MVC 4 验证中是否还有任何 secret ?
最佳答案
那么,您将必须使用 jQuery 调用 jQuery 验证(因为它是用 jQuery 编写的:))
您可以为您的输入添加一个全局事件,然后在模糊元素上调用它。像这样的东西:
$("input").blur(function () {
$(this).valid();
});
关于c# - 在 MVC4 View 中针对 ViewModel 执行客户端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692779/