ASP.NET MVC可配置验证

iur*_*ona 4 validation asp.net-mvc config

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

有些像.config文件,我可以放置信息:Type,Member,ValidationType

<validations>
    <add type="Customer" member="Name" validator="Required" />
    <add type="Customer" member="Age" validator="Range" mimimum="18" maximum="100" />
</validations>
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

rou*_*uen 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;
    }
}
Run Code Online (Sandbox Code Playgroud)