我刚刚遇到一个非常有趣的问题。如果我使用ViewData将DateTime值传递给视图,然后将其显示在文本框中,即使我以完全相同的方式使用String.Format,我在使用Html.TextBox帮助程序时会得到不同的格式化结果。
<%= 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。
答案 0 :(得分:9)
发生这种情况的原因是因为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>