【问题标题】:How to access ModelState.AddModelError() from IsValid function of ValidationAttribute class如何从 ValidationAttribute 类的 IsValid 函数访问 ModelState.AddModelError()
【发布时间】:2016-03-29 08:20:22
【问题描述】:

我尝试在IsValid 类的IsValid 函数中添加这一行ModelState.AddModelError(string key, string errorMessage); 但失败了。

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
    public class AtleastOneAttribute : ValidationAttribute, IClientValidatable
    {
        // For Server side
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value != null)
            {
                var oHobby=value as IEnumerable;

                foreach (var _object in oHobby)
                {
                    Hobby _oHobby = (Hobby)_object;
                    if (_oHobby.IsSelected)
                    {
                        return ValidationResult.Success;
                    }
                }

            }
             ModelState.AddModelError("Hobbies", "Err message....");

            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }

告诉我如何从ValidationAttribute类的IsValid函数访问ModelState.AddModelError

谢谢

【问题讨论】:

  • 什么失败了?有什么错误吗?
  • ModelState.AddModelError() 在 isValid 函数中不可访问。那么如何在代码中访问它呢?
  • 您没有访问ModelState,也没有在ValidationAttribute 中添加ModelStateError。您似乎对该属性的作用感到困惑。当您返回 ValidationResult 而不是 Success 时,DefaultModelBinder 在绑定过程中添加 ModelStateError(并且 ModelState.IsValid 变为 false

标签: asp.net-mvc modelstate


【解决方案1】:

ModelState 无法在 IsValid 函数中访问。 IsValid 方法通过它的 return 语句将错误添加到 ModelState,所以如果您需要添加错误,只需返回它:

return new ValidationResult("Err message....");

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 2018-01-17
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多