使用自定义验证属性时获取错误消息

时间:2012-09-23 13:20:56

标签: c# asp.net-mvc asp.net-mvc-3 data-annotations customvalidator

我正在使用像此一样的CustomValidationAttribute

[CustomValidation(typeof(MyValidator),"Validate",ErrorMessage = "Foo")]

我的验证器包含此代码

public class MyValidator {
    public static ValidationResult Validate(TestProperty testProperty, ValidationContext validationContext) {
        if (string.IsNullOrEmpty(testProperty.Name)) {
            return new ValidationResult(""); <-- how can I get the error message  from the custom validation attribute? 
        }
        return ValidationResult.Success;
    }
}

那么如何从自定义验证属性中获取错误消息?

4 个答案:

答案 0 :(得分:5)

没有可靠的方法从属性中获取错误消息。或者,您可以编写自定义验证属性:

[MyValidator(ErrorMessage = "Foo")]
public TestProperty SomeProperty { get; set; }
像这样:

public class MyValidatorAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var testProperty = (TestProperty)value;
        if (testProperty == null || string.IsNullOrEmpty(testProperty.Name))
        {
            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }

        return null;
    }
}

在这种情况下,将从自定义验证属性推断出错误消息。

答案 1 :(得分:4)

我知道这是一个旧帖子,但我会提供一个更好的答案。

提问者想要使用CustomValidationAttribute并使用ErrorMessage属性传递错误消息。

如果您希望静态方法使用装饰房产时提供的错误消息,则返回:

new ValidationResult(string.Empty)ValidationResult("")ValidationResult(null)

CustomValidationAttribute会覆盖其基类的FormatErrorMessage并对string.IsNullOrEmpty进行条件检查。

答案 2 :(得分:0)

您可以查看以下帖子,了解如何做您想做的事情(他们使用JS):

Custom validator error text through javascript?

希望这有帮助。

答案 3 :(得分:0)

我发现有效的唯一方法是使用TryValidateObject从回发方法验证模型,如果失败,再次显示模型 - 那么错误就会显示出来。

    [HttpPost]
    public ActionResult Standard(Standard model)
    {
        var valContext = new ValidationContext(model, null, null);
        var valResults = new List<ValidationResult>();;
        bool b = Validator.TryValidateObject(model, valContext, valResults, true);
        if(!b)
            return View(model);
        ...