Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC4视图中针对ViewModel执行客户端验证_C#_Asp.net Mvc_Validation_Asp.net Mvc 4_Client Side Validation - Fatal编程技术网

C# 在MVC4视图中针对ViewModel执行客户端验证

C# 在MVC4视图中针对ViewModel执行客户端验证,c#,asp.net-mvc,validation,asp.net-mvc-4,client-side-validation,C#,Asp.net Mvc,Validation,Asp.net Mvc 4,Client Side Validation,我想知道根据ViewModel字段上的属性处理客户端、javascript或jQuery驱动的MVC4字段验证的最佳方法是什么 首先,我们来举个例子。在应用程序第一次启动时显示管理员的登录创建屏幕(只是不要对站点所有者说“第一次使用admin/admin登录”) 视图模型: public class AdministratorViewModel : AbstractViewModel { [Required] [Display(ResourceType = typeof(Mana

我想知道根据ViewModel字段上的属性处理客户端、javascript或jQuery驱动的MVC4字段验证的最佳方法是什么

首先,我们来举个例子。在应用程序第一次启动时显示管理员的登录创建屏幕(只是不要对站点所有者说“第一次使用admin/admin登录”)

视图模型:

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; }
}
局部视图(创建第一个管理员时只需要几个字段)

目前 如果我在表单中输入无效的电子邮件地址、空密码等,然后点击提交,我将正确地收到错误通知。好的,我们继续吧

我想要什么 由于我正在进行Metro时尚设计,所以我希望每次用户取消对该字段的文本框验证时都会发生这种情况

编写硬编码的jQuery片段不是最好的选择。我想要一种数据驱动的方法,可能嵌入到我目前正在学习的MVC4中

因此,给定一个具有标准自定义属性的ViewModel(无论怎样,都需要一点Javascript,请考虑检查密码复杂性的
Org.Zighinetto.AdminPasswordAttribute
如何以最低调的方式实施客户端验证,不在每个html标记上指定客户端标记并编写尽可能少的代码


ASP.NET MVC 4验证中还有什么秘密需要我解开吗?

好吧,您可以使用jQuery调用jQuery验证(因为它是用jQuery:)编写的)

您可以为输入添加一个全局事件,然后在模糊元素上调用它。比如:

$("input").blur(function () {
    $(this).valid();
});
从我(学习)的角度来看,正确答案应该是:

说明: 当jQuery UnTrustive Validator加载到页面中时,MVC4自动完成公共属性的验证,否则只执行服务器端验证

大多数MVC4
ValidationAttribute
s(如果不是全部的话)实现了
IClientValidation
。此接口将jQuery验证器验证函数包装在服务器端代码中。很难解释它到底是如何工作的,但是说这个接口返回客户端函数的名称(由jQuery发行版提供或由用户实现),而基本上是错误的至少让新手用户能够理解验证是如何工作的

答复: 继续使用数据驱动模型/视图模型注释。
检查页面中是否加载了NuGet package jQuery Unobtrusive Validation,然后根据需要实施
IClientValidation
(我找到了一个关于多个错误的教程),字段将自动验证。

谢谢!我需要的正是这一点,因为没有其他解决方案对我有效。杰出的
    [AllowAnonymous]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult CreateFirst(AdministratorViewModel viewModel)
    {
        if (!ModelState.IsValid) return View(viewModel);
        [...................]
$("input").blur(function () {
    $(this).valid();
});