我正在使用像此一样的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; } }
那么如何从自定义验证属性中获取错误消息?
答案 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)
答案 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);
...