禁用'值'xxx'对'yyy'消息无效

时间:2012-03-07 23:35:39

标签: asp.net-mvc data-annotations

在我的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',它只允许字节值,但可能是标准验证'覆盖'此验证。是否有某种方法为属性应用自定义“值无效”消息,或以其他方式禁用标准消息?

1 个答案:

答案 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.");
    }
}