MVC5中的验证无效

时间:2014-03-19 10:15:25

标签: c# validation asp.net-mvc-5

我正在使用Visual Studio 2012和Entity Framework 6.I下载了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并跳过它。即使表单有空字段,它也总是显示为true。 客户端和服务器端验证在mvc3mvc4中有效。但我搬到了mvc5它没有用。 ClientValidationEnabled中的UnobtrusiveJavaScriptEnabledwebconfig设置为true。我需要在MVC5中设置什么以启用验证

2 个答案:

答案 0 :(得分:1)

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

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

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

然后,我在Controller中创建了两个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如何,并创建一个像我一样的简单示例。从那里开始,让它工作,当它发生时,尝试比较与你当前情况不同的东西。

这就是我试图找到解决问题的方法,通过比较一个解决方案来解决问题而不是为了指出真正的罪魁祸首。

希望这有帮助!

答案 1 :(得分:0)

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

我们发现克服这种情况的方法是在检查IsValid之前调用controller.TryValidateModel。如果您不想污染生产代码,可以使用单元测试中的反射来完成此操作。