【发布时间】:2012-06-19 00:24:21
【问题描述】:
我正在寻找一种从我的自定义验证代码中返回以下信息的方法:
public enum ValidationErrorTypeFlags
{
Error_Input = 1 << 0, // a "field specific" error which is checked both clientside and serverside
Error_Input_ServerSide = 1 << 1, // a "field specific" error which can only be checked serverside
Error_General = 1 << 2 // serverside general error
}
在验证代码(IValidatableObject 或 ValidationAttribute)中,当我检测到错误时,我希望能够将上述错误类型之一与 ValidationResult 相关联。
然后我希望能够遍历控制器或视图中的验证错误并区分这些错误类型。
我目前正在使用 MVC 3(很高兴升级到 4)。
注意:
- ModelState 不保留 ValidationResults AFAIK - 您只能访问 ViewData.ModelState.Values.Items[x].Errors 中的错误 - 这些已转换为 System.Web.Mvc.ModelError
- 似乎 MVC 验证只允许您在验证完成后访问 [key, 'error message'] 类型的验证结果。
我目前使用的hack是在自定义验证码里面装饰错误信息:
var field = new[] { validationContext.DisplayName };
return new ValidationResult("+Invalid format - use yyyy-mm-dd", field);
然后在控制器中查找以+,-,*开头的错误信息。
【问题讨论】:
-
我已经计算了 MVC3 中很多不同的地方,其中 ModelValidationError 被转换为 ModelState,所以我认为没有简单的方法可以做到这一点。
标签: asp.net-mvc modelstate asp.net-mvc-validation