Привязка модели ASP.Net MVC - как изменить формат даты? - PullRequest
7 голосов
/ 17 августа 2011

У меня есть это приложение, и формат даты по умолчанию должен быть dd/MM/yyyy (язык - бразильский португальский).

Я уже установил культуру и культуру пользовательского интерфейса на pt-BR, и теперь myDate.ToShortDateString() возвращает даты, как я хочу. У меня нет проблем с их отображением.

Проблема в том, что когда пользователь заполняет поле ввода датой, такой как 17/08/2011, и отправляет форму, параметр DateTime для моего действия становится пустым. Если я поставлю дату в формате 08/17/2011, она будет работать нормально.

Как сделать привязку модели ASP.Net MVC для правильного анализа дат?

Ответы [ 3 ]

10 голосов
/ 22 августа 2011

Я нашел, что случилось. Моя форма отправлялась с помощью метода GET, и MVC просто использует культуру для параметра действия, когда он передается в RouteData или формой с помощью метода POST.

Я просто изменил форму на POST метод, и он сработал.

5 голосов
/ 18 августа 2011

Попробуйте это на вашей недвижимости в представлении модель:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
2 голосов
/ 18 августа 2011

Я почти уверен, что проблема заключается в отсутствии DateTimeFormat для ваших типов DateTime.

<input type="text" name="DateProperty" id="DateProperty"
       value="@(Model.DateProperty.Value.ToString("d",
             System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat))" />

EDIT **

Еще одна вещь, в которой вы хотите быть уверенным, это то, что свойство "name" вашего элемента ввода соответствует тому, что вы передаете в свое действие. Если оно не равно нулю, оно будет появляться в действии POST каждый раз.

     [HttpPost]
     public ActionResult DoStuff(string dateParam)
     {
       return RedirectToAction("Home","Index", new { });
     }

"dateParam" должен соответствовать имени свойства здесь.

<input id="dateParam" name="dateParam" value="10/10/2010" />
...