9

我正在使用这样的 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

4 回答 4

8

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

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

如果您希望您的静态方法使用您在装饰您的财产时提供的错误消息,那么您可以返回:

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

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

于 2014-10-22T14:43:25.247 回答
7

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

[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;
    }
}

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

于 2012-09-23T13:39:26.767 回答
0

您可以查看以下帖子以获取有关如何做您想做的事情的一些想法(他们使用 JS):

通过javascript自定义验证器错误文本?

希望这可以帮助。

于 2012-09-23T13:37:09.970 回答
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);
        ...
于 2013-10-10T21:10:12.393 回答