2010-11-10 2 views
2

Я использую СУБД Entity Framework + SQL Server и использую частичные классы с DataAnnotations для проверки данных. Для таких вещей, как Required и Range, это работает нормально, но я не могу заставить валидаторы DataType работать.MVC2: Использование DataAnnotations для проверки DataType

Вот пример (на заказ) аннотацию:

[DataTypeWholeNumberAttribute(ErrorMessage = "Zip must be a whole number")] 
public object Zip{ get; set; } 

... и код контроллера ...

[HttpPost] 
public ActionResult Edit(NamedInsuredViewModel viewModel) 
{ 
    try 
    { //breakpoint here (opening squiggly bracket) shows .Zip is already null 
     if (ModelState.IsValid) 
     ...save, etc... 
    } 
} 

И я знаю, что происходит: тип данных Zip в база данных является int, поэтому проверка по умолчанию ловит это и применяет общее сообщение об ошибке «значение [x] недопустимо для [FieldName]», прежде чем мой валидатор сможет его получить (чтобы доказать это, я также добавил тот же валидатор к строковому полю, и он отлично работает). Я не знаю, как я могу обойти это (и нет, я не могу изменить БД, чтобы использовать строки для всего)?

Некоторые предложения были предложены в этом посте (http://forums.asp.net/p/1608322/4162819.aspx#4162819), но до сих пор ничего не помогло.

Заранее спасибо.

PS - нет ли способа проверить примитивный DataType без создания настраиваемого атрибута?

+1

Почему Zip-объект? Почему это не int? – jfar

ответ

0

Я думаю, что ошибка состоит в том, чтобы передать что-то под названием «viewModel» в действие «Редактировать действие». ViewModel предназначен для передачи данных в виде, чтобы визуализировать его. Когда вы отправляете форму, данные должны быть сопоставлены сущности, а не к viewModel.

[HttpPost] 
public ActionResult Edit(YourEntity entity) 
{ 
    try 
    { //breakpoint here (opening squiggly bracket) shows .Zip is already null 
     if (ModelState.IsValid) 
     ...save, etc... 
    } 
} 
0

Применить ваш валидатор к классу. Затем передайте свой экземпляр класса как параметр для своего валидатора вместо строки. Затем вы можете выполнить проверку на соответствующем свойстве независимо от типа.

Смежные вопросы