绕过客户端验证mvc 3

时间:2011-08-30 02:21:11

标签: asp.net asp.net-mvc-3 c#-4.0 entity-framework-4

这是我们正在使用的模型......

Public Class Person
{
        [Display(ResourceType = typeof(BasicTags), Name = "FirstName")]
        [Required(ErrorMessageResourceName = "FirstNameRequired", ErrorMessageResourceType = typeof(BasicErrors))]
        public string FirstName;

        [Display(ResourceType = typeof(BasicTags), Name = "LastName")]
        [Required(ErrorMessageResourceName = "LastNameRequired", ErrorMessageResourceType = typeof(BasicErrors))]
        public string LastName;
}

两个字段都设置为必需true。现在我们有另一个开发人员在另一个视图中使用同一个模型,他不希望对他的页面进行此验证,如何在保存之前跳过服务器端的验证?

数据库字段设置为allow null。

ViewData.ModelState.Remove("FirstName") 
ViewData.ModelState.Remove("LastName")

这只会删除客户端消息,但实际验证仍然存在。有什么办法,所以我可以保存。

感谢。

3 个答案:

答案 0 :(得分:2)

您应该创建一个具有这些属性但没有针对该特定页面进行验证注释的自定义视图模型。

答案 1 :(得分:1)

只是不要检查服务器端的ModelState.IsValid并保存数据。

但是 - 我只是制作该视图模型的副本,删除您的属性并完成它。 ViewModel用于视图 - 如果您有不同的视图,标准操作是创建一个新模型。然而 - 它是你的应用程序 - 所以你想要的解决方案就在上面。

如果您担心客户端验证,那么您必须为submit函数创建自己的处理程序,并且不检查它是否有效 - 只是发布。另一个黑客。所以 - 再次......尽量不要这样做。 :)

答案 2 :(得分:0)

您也可以致电ModelState.Remove("FirstName");

ModelState.IsValid之前,它会发挥作用,比如

ModelState.Remove("FirstName");
if(ModelState.IsValid){
     // your code
}
相关问题