为什么ASP NET MVC中的日期格式在Html Helper中使用时有所不同?

时间:2010-06-18 04:58:53

标签: asp.net-mvc datetime-format

我刚刚遇到一个非常有趣的问题。如果我使用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。

1 个答案:

答案 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>