Проверка соответствия типа привязки модели - PullRequest
1 голос
/ 13 марта 2009

В настоящее время я вижу ошибки DefaultModelBinder, потому что ввод недопустим для типа (символ в int, недопустимая дата и т. Д.). Я получаю сводку ошибок по умолчанию для пользовательского интерфейса «Что-то пошло не так ...», но нет конкретного сообщения об ошибке относительно конкретного свойства, которое не удалось преобразовать.

Например, свойство модели может быть датой и временем, которое должно произойти в будущем. Он может быть украшен атрибутом Validator, который выдаст ошибку «{Свойство} - это дата, которая должна произойти в будущем. Пример 15.04.2009 ». Это сообщение также может относиться к ошибкам преобразования типов.

Как я могу дать описательные сообщения об ошибках, когда преобразование типов не выполняется во время привязки модели? Пользовательские модели связующих, фильтры, любые примеры будут оценены.

Примечание: я тестировал с реализациями NHib Val, Castle Val, xVal Lib и другими более ручными методами, и все это хорошо работает для меня, но я не вижу, что это помогает мне с проблемы преобразования типов…

UPDATE: Я нашел этот обмен с участием С. Сандерсона (создателя xVal) в списке проблем MVC Codeplex. Это обсуждает проблему, которую я вижу более подробно ... http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=3230

1 Ответ

0 голосов
/ 13 марта 2009

Мне лично нравится, что проверка выполняется в сущности с атрибутами и кодом c #, поэтому я думаю, что следующий подход, по крайней мере, стоит посмотреть:

http://codebetter.com/blogs/david.hayden/archive/2009/01/31/asp-net-mvc-and-validation-using-idataerrorinfo-and-validation-application-block.aspx

Это заставляет сущности реализовывать IDataErrorInfo . Помимо проверки атрибутов проверки каждого свойства, вы также можете проверить наличие нулей, недействительных приведений или любой другой пользовательской логики, подобной этой:

Когда это произойдет:

public string this[string columnName]
    {
        get 
        {
            return DoValidation(columnName);
        }
    }

Вы можете сделать что-то вроде:

public string this[string columnName]
    {
        get 
        {
            if(columnName=="myDatePropertyName")
            {
               //Add custom logic (invalid casts or whatever)
            }
            return DoValidation(columnName);
        }
    }

Что мне не нравится в этой модели, так это необходимость помещать сообщения об ошибках проверки в каждое свойство, например, но это хороший старт.

В любом случае, это пример модели, которая связывает ваши пользовательские ошибки с соответствующим свойством, поэтому позже она будет показана в вашей ValidationSummary.

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...