2011-07-20 44 views
0

我们在当前的应用程序实现中严重依赖于使用MicrosoftMvcValidation.debug.js的客户端验证。如何在运行时动态添加/删除ASP.NET MVC中的验证器?

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

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

使用ASP.NET MVC 2

回答

3

将[必需]属性添加到可能需要的任何字段。只要你不绑定一个控制客户端,你将绕过客户端验证没有问题。在服务器端回传操作中,循环访问ModelState(它实现了IDictionary)并清除ModelState上您想绕过的验证器的错误。

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

似乎可以创建一个自定义的类继承ValidationAttribute可以在运行时验证是如何或是否做了决定。这是完成这一要求的一种方式。

+0

有一个更好的办法,你在做什么。现在不能回答,因为它相当长。今晚将发布代码。 – jfar

+0

@jfar 2年后,我很好奇你计划发布的内容。针对与MVC4相同的问题运行:http://stackoverflow.com/questions/18919758/dynamically-apply-validation-rules-at-runtime-with-asp-net-mvc-4 – joelmdev

+0

@ jm2我通过您的电子邮件发送给您您的网站上的联系页面。 – jfar

相关问题