[英]Validation in MVC5 not working
我正在使用Visual Studio 2012和Entity Framework6。我下载了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。 客户端和服务器端验证在mvc3
和mvc4
。 但我搬到了mvc5
它不起作用。 在webconfig
ClientValidationEnabled
和UnobtrusiveJavaScriptEnabled
设置为true。 我需要在MVC5
设置MVC5
以启用验证
具有强类型的View
提交并触发客户端验证通常是开箱即用的。
例如,我刚刚在VS 2013(不是VS 2012)中创建了一个新项目,并选择了具有Individual User Accounts
的MVC模板(以加载,捆绑所有适当的脚本等)。
然后,我创建了一个名为CreateNewUser
的ViewModel并复制/粘贴了所有属性。
然后,在控制器中创建两个ActionResult。 一个加载视图,另一个处理表单的提交。
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;
}
然后,我创建了与该CreateNewUser
类紧密CreateNewUser
的View。
当我单击“提交”按钮时,表单的客户端验证可以完美地工作!
也许,无论VS2012还是VS2013,您都应该创建一个全新的项目,并像我一样创建一个简单的示例。 从那里开始,使其生效,然后在可行时,尝试将与您当前情况不同的事物进行比较。
这就是我试图通过比较可以与不起作用的解决方案进行比较来找到问题的解决方案的方法,以便找出真正的罪魁祸首。
希望这可以帮助!
如果通过单元测试评估IsValid标志,则它似乎始终为true,并且验证属性被完全忽略(但通过IIS Express执行的代码相同时,效果很好)。
我们发现一种克服此问题的方法是在检查IsValid之前调用controller.TryValidateModel。 如果您不想污染您的生产代码,则可以使用单元测试中的反射来完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.