Настройка сообщений об ошибках привязки модели в ASP.NET MVC 3 - PullRequest
4 голосов
/ 27 июня 2011

Я использую ASP.NET MVC 3 с Fluent Validation. Я хотел бы, чтобы все мои сообщения об ошибках были сформулированы и отформатированы одинаково, будь то сообщения об ошибках валидации или сообщения об ошибках привязки модели.

Допустим, у меня есть следующая модель вида:

[Validator(typeof(PersonValidator))]
public class Person
{
    [ScaffoldColumn(false)] public int    Id   { get; set; }
                            public string Name { get; set; }
                            public int    Age  { get; set; }
}

Чтобы проверить это с помощью Fluent Validation, я мог бы использовать что-то вроде этого:

public class EditorValidator : AbstractValidator<EditorModel>
{
    public EditorValidator()
    {
        RuleFor(model => model.Month.Value).InclusiveBetween(0, 120)
    }
}

Если пользователь вводит «abc» для Age, это вызывает ошибку привязки модели , а не ошибку проверки . Это потому, что «abc» не является int. Система даже не доходит до вопроса, находится ли «abc» между 0 и 120, потому что «abc» не может быть сохранен в Age.

Это хорошо и имеет смысл. Проблема в том, что полученное сообщение об ошибке:

Поле Age должно быть числом.

Я бы хотел, чтобы сообщение было отформатировано и сформулировано так же, как и другое сообщение об ошибке, созданное Fluent Validation. В этом случае я бы хотел:

«Возраст» должен быть числом.

Я понимаю, что это лишь небольшая разница, но я хотел бы контролировать сообщения об ошибках привязки модели.

Как настроить сообщения об ошибках привязки модели в соответствии с сообщениями об ошибках, используемыми Fluent Validation?

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Я не уверен, есть ли другой способ сделать это, но я использую Расширения аннотаций данных , также доступные через NuGet (Install-Package DataAnnotationsExtensions.MVC3) для этого точного типа вещей.Этот пакет даст вам IntegerAttribute, и оттуда вы можете указать сообщение об ошибке, например:

[Integer(ErrorMessage = "'Age' must be a number.")]
public int Age { get; set; }
0 голосов
/ 28 июня 2011

Посмотрите на мой ответ здесь:

Как изменить проверку сообщения 'data-val-number' в MVC, когда оно генерируется @Html helper

На самом деле, это очень распространенный вопрос, который вы задали, поэтому вы должны погуглить стекопоток до публикации.

...