Привязка модели ASP.Net MVC - как изменить формат даты?

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

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

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

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


person Doug    schedule 17.08.2011    source источник
comment
проверьте этот ответ stackoverflow.com/questions/528545/   -  person dotjoe    schedule 18.08.2011
comment
Попробуйте решить этот вопрос stackoverflow .com / questions / 6177626 /   -  person agradl    schedule 18.08.2011


Ответы (3)


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

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

person Doug    schedule 22.08.2011
comment
День потерян только потому, что никто никогда не говорит, что метод GET не применяет культуру. Спас мой день .. Спасибо, все же, вы должны исправить свой пост, он работает с POST, а не с GET. - person Phoenix_uy; 22.10.2011
comment
Дополнительная информация о том, как работает MVC ModelBinder и почему: weblogs.asp.net/melvynharbour / mvc-modelbinder-and-localization - person webStuff; 05.08.2016

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

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
person Tae-Sung Shin    schedule 17.08.2011

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

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

РЕДАКТИРОВАТЬ**

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

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

"dateParam" Должно соответствовать свойству name здесь.

<input id="dateParam" name="dateParam" value="10/10/2010" />
person The Internet    schedule 17.08.2011
comment
Вывод даты в HTML - не проблема. Привязка представленного значения есть. Даже если я сделаю то, что вы сказали, отправка формы не будет работать должным образом. - person Doug; 18.08.2011