asp.net MVC ModelState.IsValid возвращает false - PullRequest
2 голосов
/ 21 мая 2010

Я работаю в приложении ASP.NET MVC.У меня есть модель представления следующим образом:

public class SampleInterestViewModel
{
   //Properties defined
   //One such property that shows an error in ModelState is as follows
   public DateTime? SampleDate { get; set; }
}

С точки зрения пользовательского интерфейса пользователь может ввести дату в виде ммддйййй.И когда пользователь вводит в таком формате, скажем, 01012001, мой кусок кода ModelState.IsValid в контроллере возвращает false.Когда я сделал быстрый просмотр в ModelState, я вижу ошибку для правильного «SampleDate», говорящую «Значение 01012001 недопустимо для SampleDate».

В моем связывателе моделей во время события OnModelUpdated я пытался отформатироватьзначение с 01012001 по 01.01.2001 и присвоение его обратно SampleInterestViewModel.SampleDate, полагая, что ModelState.IsValid может вернуть true без этой ошибки.Но все же ModelState.IsValid имеет значение false, и когда я заглянул в словарь ModelState, это конкретное свойство все еще содержит ошибки в своей коллекции.

Наконец я попытался отформатировать 01012001 и обновить значение 01/01/2001непосредственно к свойству SampleDate в словаре ModelState.Но все же ModelState.IsValid имеет значение false, показывая ту же ошибку для свойства SampleDate.Не могу понять, почему ModelState.IsValid работает и как и когда он установлен в false.

Если пользователь вводит 01012001 в пользовательском интерфейсе, мне все еще нужно отформатировать его в связывателе моделей по состоянию на 01.01.2001 и убедиться, что ModelState.IsValid имеет значение true, чтобы остальная часть кода моего контроллера могла работать какожидается.В пользовательском интерфейсе я делаю AjaxSubmit для публикации значения sampleDate.

Любые мысли или комментарии.

Ответы [ 2 ]

4 голосов
/ 21 мая 2010

Я вижу несколько решений:

  1. После исправления формата в подшивке модели вы можете устранить ошибку ModelState с помощью ModelState["SampleDate"].Errors.Clear();.
  2. Используйте JavaScript для проверки ввода, чтобы заставить пользователя ввести правильный формат.
  3. Используйте JavaScript, чтобы изменить формат для пользователя перед отправкой формы.

Я думаю, что комбинация 1 и 2 - ваша лучшая ставка.

4 голосов
/ 21 мая 2010

Попробуйте использовать в своем действии белый список параметров для привязки, набрав

Bind(Include="param1,param2...")

И в этом списке опустите параметр, который вы связываете самостоятельно. Прочитайте этот пост Скоттгу для получения дополнительной информации.

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