Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC5中的验证不起作用_C#_Validation_Asp.net Mvc 5 - Fatal编程技术网

C# 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")]

我正在使用Visual studio 2012和实体框架6。我下载了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
中设置任何内容来启用验证

具有强类型的
视图
提交并触发客户端验证通常是现成的

例如,我刚刚在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。如果您不想污染您的生产代码,您可以使用单元测试的反射来做到这一点