C# MVC5中的验证不起作用
我正在使用Visual studio 2012和实体框架6。我下载了MVC5的更新。我创建了一个模型类C# MVC5中的验证不起作用,c#,validation,asp.net-mvc-5,C#,Validation,Asp.net Mvc 5,我正在使用Visual studio 2012和实体框架6。我下载了MVC5的更新。我创建了一个模型类CreateUser,如下所示 public class CreateNewUser { [Required] [Display(Name = "Name")] public String Name{set;get;} [Required] [Display(Name = "Mobile")]
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
中设置任何内容来启用验证具有强类型的视图
提交并触发客户端验证通常是现成的
例如,我刚刚在VS 2013(而不是VS 2012)中创建了一个新项目,并选择了带有个人用户帐户的MVC模板(以便加载、捆绑所有适当的脚本等)
然后,我创建了一个名为CreateNewUser
的视图模型,并复制/粘贴了所有属性
然后,在控制器中创建两个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,并像我一样创建一个简单的示例。从那里开始,让它发挥作用,当它发挥作用时,试着比较与你当前情况不同的东西
这就是我如何通过比较一个可行的解决方案和一个不可行的解决方案来找出问题的解决方案,从而找出真正的罪魁祸首
希望这有帮助 如果您通过单元测试来评估IsValid标志,那么它似乎总是正确的,并且验证属性被完全忽略(但是当它通过IIS Express执行相同的代码时,工作正常)
我们发现了一种克服这一问题的方法,即在检查IsValid之前调用controller.TryValidateModel。如果您不想污染您的生产代码,您可以使用单元测试的反射来做到这一点