asp.net-mvc - MVC Validator.TryValidateObject 不验证自定义属性,validateAllProperties = true

标签 asp.net-mvc model-view-controller data-annotations

使用 validateAllProperties = true 调用 Validator.TryValidateObject 时,我的自定义验证属性不会被触发。 ValidationResult 不包含我的错误属性值的条目。下面是用于测试的模型、属性和代码。

//Model
public class Model
{
    [AmountGreaterThanZero]
    public int? Amount { get; set; }
}

//Attribute
public sealed class AmountGreaterThanZero: ValidationAttribute
{
    private const string errorMessage = "Amount should be greater than zero.";

    public AmountGreaterThanZero() : base(errorMessage) {  }

    public override string FormatErrorMessage(string name)
    {
        return errorMessage;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            if ((int)value <= 0)
            {
                var message = FormatErrorMessage(validationContext.DisplayName);
                return new ValidationResult(message);
            }
        }
        return null;
    }

    public override bool IsValid(object value)
    {
        if ((int)value < 0)
        {
            return false;
        }

        return true;
    }
}

//Validation Code
var container = new Container();
container.ModelList = new List<Model>() { new Model() { Amount = -5 } };
var validationContext = new ValidationContext(container, null, null);
var validationResults = new List<ValidationResult>();
var modelIsValid = Validator.TryValidateObject(container, validationContext, validationResults, true);

注意:如果我使用 TryValidateProperty 方法,验证工作正常,并且 ValidationResult 返回正确的错误消息。

编辑:按照@Fals的建议和我采取的方法是单独验证列表中的每个对象。

最佳答案

将@Fals 的评论标记为答案,因为这是我最终采取的方法。因为没有其他问题的答案可以满足我原来的问题。

@Fals - Thats the problem, you must pass object by object to validade!

关于asp.net-mvc - MVC Validator.TryValidateObject 不验证自定义属性,validateAllProperties = true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17280213/

相关文章:

c# - 使用 Bootstrap 的 C# MVC 网站中的面包屑导航

asp.net-mvc - 我可以在不加载整个集合的情况下删除单个子实体吗?

ruby-on-rails - 多个要求并允许强参数 rails 4

php - 我应该将我的实际 Controller 文件命名为与我在 Codeigniter 中的 View 文件相同的名称吗?

c# - Display 属性中的 ShortName (DataAnnotations)

c# - 从数据库而不是文件中提取 View

php - 适合论坛的 MVC 结构

c# - CustomValidation 属性似乎不起作用

asp.net-mvc-3 - ASP.Net MVC 3 - 使用 DataAnnotations 的不显眼的客户端验证 - 字段是必需的,但不应该是

c# - TempData 的值在 "Redirect"之后变为空