我读了一些帖子,但现在无法找到它,在MVC 3中,并不是真的需要创建一个Validator,只有Attribute.这是真的?我确实说我发现该属性上有IClientValidatable令人困惑.那么,如果注释具有客户端脚本名称(IClientValidatable),那么DataAnnotationsModelValidator类会做什么,以及验证(ValidationAttribute IsValid)的能力?
如果我不必在全局中使用Validator注册Attribute,那将是非常好的.可以这样做吗?我读过一些不好的建议了吗?
编辑:有趣的是我只是通过排除验证器来测试它,将所有逻辑放在IsValid中并且它工作得很好.我想唯一可能缺少的是控制器上下文,但我不确定它在验证中是否有用.如果我需要服务,IsValid有ValidationContext,它有ServiceContainer.我没有在这里找到任何真正的劣势?
编辑2:我将从这个例子中的验证器开始:http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx
属性:
public class RequiredIfAttribute : ValidationAttribute, IClientValidatable
{
private RequiredAttribute innerAttribute = new RequiredAttribute();
public string DependentProperty { get; set; }
public object TargetValue { get; set; }
public RequiredIfAttribute(string dependentProperty, object targetValue)
{
this.DependentProperty = dependentProperty;
this.TargetValue = targetValue;
}
public override bool IsValid(object value)
{
return innerAttribute.IsValid(value);
}
public System.Collections.Generic.IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
ModelClientValidationRule modelClientValidationRule = new ModelClientValidationRule()
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "requiredifattribute"
};
modelClientValidationRule.ValidationParameters.Add("requiredifattribute", …Run Code Online (Sandbox Code Playgroud)