首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC5中的验证不起作用

MVC5中的验证不起作用
EN

Stack Overflow用户
提问于 2014-03-19 18:15:25
回答 2查看 460关注 0票数 0

我正在使用Visual studio 2012和Entity Framework6.I下载了MVC5的更新。我创建了一个模型类CreateUser,如下所示

代码语言:javascript
复制
   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。客户端和服务器端验证在mvc3mvc4中有效。但是我转移到了mvc5,它不能工作。ClientValidationEnabledUnobtrusiveJavaScriptEnabledwebconfig中设置为true。我需要在MVC5中设置哪些内容才能启用验证

EN

回答 2

Stack Overflow用户

发布于 2014-03-19 21:32:50

强类型的View提交和触发器客户端验证通常是开箱即用的。

例如,我刚刚在VS2013(而不是VS2012)中创建了一个新项目,并使用Individual User Accounts选择了MVC模板(以加载、捆绑所有合适的脚本等)。

然后,我创建了一个名为CreateNewUser的ViewModel,并复制/粘贴了所有属性。

然后,我在控制器中创建了两个ActionResult。一个用于加载视图,另一个用于处理表单的提交。

代码语言:javascript
复制
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,并像我一样创建一个简单的示例。从那里开始,让它起作用,当它起作用时,尝试比较与你当前情况不同的东西。

这就是我如何尝试通过比较一个有效的解决方案和一个无效的解决方案来找到我的问题的解决方案,以便找出真正的罪魁祸首。

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2014-04-02 17:13:43

如果您通过单元测试评估IsValid标志,那么它似乎总是正确的,并且验证属性被完全忽略(但是,当相同的代码通过IIS Express执行时,它仍然工作得很好)。

我们发现了一种克服这个问题的方法,就是在检查IsValid之前调用controller.TryValidateModel。如果你不想污染你的生产代码,你可以使用单元测试中的反射来达到这个目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22502527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档