我正在使用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。
客户端和服务器端验证在mvc3
和mvc4
中有效。但我搬到了mvc5
它没有用。 ClientValidationEnabled
中的UnobtrusiveJavaScriptEnabled
,webconfig
设置为true。我需要在MVC5
中设置什么以启用验证
答案 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。如果您不想污染生产代码,可以使用单元测试中的反射来完成此操作。