Отключить 'Значение' xxx 'недопустимо для сообщения' yyy ' - PullRequest
3 голосов
/ 08 марта 2012

В моем приложении ASP.NET MVC у меня есть форма, и я использую ViewModel, поэтому ModelBinder может связываться с моим строго типизированным классом.Я использую 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 голосов
/ 11 октября 2013

Вот другой (не идеальный способ, IMHO) исправить это, если пользовательский атрибут проверки не работает для вас. В контроллере:

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