Почему формат даты в ASP Net MVC отличается при использовании внутри HTML-помощника?
-
28-09-2019 - |
Вопрос
Я только что наткнулся на очень интересный вопрос. Если я использую ViewData, чтобы пройти значение TATETIME к представлению, а затем отображать его внутри текстового полета, даже если я использую String.Format точно так же, я получаю разные результаты форматирования при использовании HTML.TextBox 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.
Решение
Причина, по которой это происходит, потому что помощник TextBox использует значение, хранящееся внутри ViewData["datefilter"]
потому что его имя datefilter
и полностью игнорирует второй аргумент, который вы передаете, который должен отформатировать дату. Попробуйте изменить имя текстового поля.
Лучшее решение - использовать шаблоны редактора и сильно набранные мнения вместо ViewData
. Отказ Вот пример.
Модель:
public class MyModel
{
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",
ApplyFormatInEditMode = true)]
public DateTime Date { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyModel
{
Date = DateTime.Now
};
return View(model);
}
}
Вид:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SomeNs.Models.MyModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%: Html.EditorFor(x => x.Date) %>
</asp:Content>