Я только что наткнулся на очень интересную проблему. Если я использую ViewData для передачи значения DateTime в представление и затем отображаю его внутри текстового поля, даже если я использую String.Format точно так же, я получаю разные результаты форматирования при использовании помощника Html.TextBox.Почему формат даты в ASP NET MVC отличается при использовании внутри Html Helper?
<%= Html.TextBox("datefilter", String.Format("{0:d}", ViewData["datefilter"]))%>
<input id="test" name="test" type="text" value="<%: String.Format("{0:d}", ViewData["datefilter"]) %>" />
Приведенный выше код предоставляет следующий HTML:
<input id="datefilter" name="datefilter" type="text" value="2010-06-18" />
<input id="test" name="test" type="text" value="18/06/2010" />
Обратите внимание, как кулак линия, которая использует помощник Html производит формат даты в одну сторону, а второй один производит совсем другой вывод. Любые идеи почему?
Примечание: Я сейчас в Бразилии, поэтому стандартный формат коротких дат здесь - dd/MM/yyyy.
+1 Взгляните на последних трех пунктах, он уточняет ответ Дарин немного больше. http://weblogs.asp.net/jeff/archive/2009/08/18/under-the-covers-of-html-helpers-in-asp-net-mvc.aspx. Дата должна по-прежнему оцениваться с использованием текущей культуры, но ее нет. Зачем? – Ahmad
Теперь я вижу, что я сделал. Не только ViewData имел ключ с именем «datefilter», но также и имя параметра для маршрута. Таким образом, даже после полного удаления ViewData, Html.TextBox («datefilter») вытащил его из ModelState или где-то еще. Я просто не знаю, почему не отформатирован в соответствии с нынешней культурой, как сказал Ахмад. Но я думаю, теперь я понял немного лучше, как эти помощники должны быть использованы, благодаря вам, ребята. А также, спасибо за этот отличный пример Daring, это может показаться тривиальным, но на самом деле это намного приятнее, чем использование ViewData. ;) –