我正在使用Visual studio 2012和Entity Framework6.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。客户端和服务器端验证在mvc3和mvc4中有效。但是我转移到了mvc5,它不能工作。ClientValidationEnabled、UnobtrusiveJavaScriptEnabled在webconfig中设置为true。我需要在MVC5中设置哪些内容才能启用验证
发布于 2014-03-19 21:32:50
强类型的View提交和触发器客户端验证通常是开箱即用的。
例如,我刚刚在VS2013(而不是VS2012)中创建了一个新项目,并使用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类的视图。
当我单击submit按钮时,表单的客户端验证就可以正常工作了!
也许,您应该创建一个全新的项目,而不考虑VS2012或VS2013,并像我一样创建一个简单的示例。从那里开始,让它起作用,当它起作用时,尝试比较与你当前情况不同的东西。
这就是我如何尝试通过比较一个有效的解决方案和一个无效的解决方案来找到我的问题的解决方案,以便找出真正的罪魁祸首。
希望这能有所帮助!
发布于 2014-04-02 17:13:43
如果您通过单元测试评估IsValid标志,那么它似乎总是正确的,并且验证属性被完全忽略(但是,当相同的代码通过IIS Express执行时,它仍然工作得很好)。
我们发现了一种克服这个问题的方法,就是在检查IsValid之前调用controller.TryValidateModel。如果你不想污染你的生产代码,你可以使用单元测试中的反射来达到这个目的。
https://stackoverflow.com/questions/22502527
复制相似问题