MVC5中的验证不起作用

本文关键字:不起作用 验证 MVC5 | 更新日期: 2023-09-27 17:50:52

我使用Visual studio 2012和Entity Framework 6。我下载了MVC5的更新。我创建了一个模型类CreateUser,如下所示

   public class CreateNewUser
    {
        [Required]
        [Display(Name = "Name")]
        public String Name{set;get;}
        [Required]
        [Display(Name = "Mobile")]
        [RegularExpression(@"^([0|'+[0-9]{1,5}['-'s])?([7-9][0-9]{9})$", ErrorMessage = "Entered phone format is not valid.")]
        public String Mobile { get; set; }
        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public String Email { get; set; }
        [Required]
        [Display(Name = "Password")]
        [DataType(DataType.Password)]
        public String Password { get; set; }
    }
并使用这个模型类创建一个视图。当我运行表单时,它被提交而不进行验证。我在服务器上使用ModelState.IsValid并跳过它。即使表单有空字段,它也总是显示为真。客户端和服务器端验证在mvc3mvc4中工作。但我搬到mvc5,它不工作。webconfig中的ClientValidationEnabledUnobtrusiveJavaScriptEnabled设置为true。我是否需要在MVC5中设置任何内容以启用验证

MVC5中的验证不起作用

使用强类型的View提交和触发客户端验证通常是开箱即用的。

例如,我刚刚在VS 2013(不是VS 2012)创建了一个新项目,并选择了MVC模板与Individual User Accounts(有所有适当的脚本加载,捆绑等)。

然后,我创建了一个名为CreateNewUser的ViewModel,并复制/粘贴了所有属性。

然后,我在我的控制器中创建两个ActionResult。一个用于加载View,另一个用于处理表单的提交。

public ActionResult CreateUser()
{
    var model = new CreateNewUser();
    return View(model);
}
[HttpPost]
public ActionResult CreateUser(CreateNewUser model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
    //Model is valid so continue...
    return null;
}

然后,我创建了View,它是这个CreateNewUser类的强类型。

当我点击提交按钮时,表单的客户端验证工作完美!

也许,你应该创建一个全新的项目,不管VS2012或VS2013,并创建一个简单的例子,就像我做的。从那里开始,让它起作用,当它起作用时,试着比较与你当前情况不同的事情。

这就是我如何通过比较一个有效的解决方案和另一个无效的解决方案来找到问题的解决方案,从而找出真正的罪魁祸首。

希望这对你有帮助!

如果您正在通过单元测试评估IsValid标志,似乎它总是为真,并且验证属性被完全忽略(但是当通过IIS Express执行相同的代码时工作良好)。

我们找到了一种方法来克服这一点是调用控制器。在检查IsValid之前TryValidateModel。如果您不想污染您的产品代码,您可以使用来自单元测试的反射。