在我的ASP.NET MVC应用程序中,我有一个表单,我正在使用ViewModel,因此ModelBinder可以绑定到我的Strongly Typed类。我正在使用DataAnnotations进行验证
public class FormViewModel
{
[Required]
public string SomeValue {get;set;}
[Range(0, 10, ErrorMessage="Enter a number between 0 and 10.")]
public byte? SomeOtherValue {get;set;}
}
这很有效。然而问题是当用户没有输入SomeOtherValue的有效值(如abc)时,会弹出一个标准的MVC错误:'值'abc'对'SomeOtherValue'无效。这真的很烦人,因为我无法自定义此消息。我知道有办法本地化这个消息,但这没有意义(我不想要一般消息,我想要一个特定于值的值)。
我尝试将RegularExpression属性应用于'SomeOtherValue',它只允许字节值,但可能是标准验证'覆盖'此验证。是否有某种方法为属性应用自定义“值无效”消息,或以其他方式禁用标准消息?
答案 0 :(得分:0)
如果自定义验证属性不适合你,这是一个不同的(非理想方式,恕我直言)来修复它。在控制器中:
if (!ModelState.IsValid)
{
string fieldName = "ThatFieldName";
var m = ViewData.ModelState[fieldName];
if (m != null && m.Errors.Count > 0)
{
ViewData.ModelState.Remove(fieldName);
ViewData.ModelState.AddModelError(fieldName, "You mucked that field up.");
}
}