ASP.NET MVC可配置验证

时间:2011-12-06 00:40:08

标签: asp.net-mvc validation config

我想使用来自可配置源的asp.net mvc客户端/服务器验证。

有些像.config文件,我可以放置信息: 类型,成员,ValidationType

<validations>
    <add type="Customer" member="Name" validator="Required" />
    <add type="Customer" member="Age" validator="Range" mimimum="18" maximum="100" />
</validations>

通过此计划,可以启用/禁用验证。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

如果需要,请考虑一些更高级的验证框架,例如Enterprise Library Validation Block。

如果你想自己动手,我会建议你像ValidationAttribute一样创建自定义属性(部分伪代码,我相信你明白了)

public class ConfigurableValidationAttribute: ValidationAttribute
{
    public override bool IsValid(object value)
    {
       string objectType = value.GetType().FullName;
       string objectName = GetMyObjectName(value); // interface? reflection?
       var validationRules = GetValidationRulesFor(objectType, name); // from your configuration

       foreach (var rule in validationRules)
       {       
           ValidationAttribute attr = null;          
           switch (rule.ValidatorName)
           {
              case "Required": attr = new RequiredAttribute();
              case "StringLength": attr = // you get the idea
           }

           if (!attr.IsValid(value)) return false;
       }

       return true;
    }
}