相关疑难解决方法(0)

使用DataAnnotationsModelValidatorProvider.RegisterAdapter的MVC 2与MVC 3自定义验证属性

我读了一些帖子,但现在无法找到它,在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)

validation asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

14
推荐指数
1
解决办法
7673
查看次数