使用自定义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); ...