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

我正在使用像这样的CustomValidationAttribute

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

我的validation器包含此代码

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

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

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

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

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

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

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

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

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

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

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

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

希望这可以帮助。

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

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