如何在运行时动态添加/删除ASP.NET MVC中的验证器?

时间:2011-07-20 18:26:40

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-2-validation

我们在当前的应用程序实现中使用MicrosoftMvcValidation.debug.js严重依赖客户端验证。

我们在数据库中定义了表单元素和表单验证器,并在运行时从数据库加载。我们有viewmodel属性Answer1,Answer2,Answer3等,到目前为止所有字段都是必需的,所以我们每个都有[Required]属性,但现在我们需要在运行时根据数据库设置应用这个必需的注释因为有些问题是可选的。

我不想对验证器本身进行任何重新实现,我只想在运行时动态删除[Required]属性和/或它们的效果,或者在运行时动态添加它们。

使用ASP.NET MVC 2.

2 个答案:

答案 0 :(得分:3)

将[Required]属性添加到可能需要的任何字段。只要您不绑定控件客户端,就可以毫无问题地绕过客户端验证。在服务器端回发后操作,循环遍历ModelState(实现IDictionary)并清除ModelState上要绕过的验证程序的错误。

foreach( var validator in ModelState){
   if( validator.Key == "Validator_To_Bypass")
       validator.Value.Errors.Clear();
}

答案 1 :(得分:0)

似乎可以创建一个继承ValidationAttribute的自定义类,该类可以在运行时确定验证是如何完成的。这是实现此要求的一种方式。