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

Mar*_*abe 3 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"]) %>" />
Run Code Online (Sandbox Code Playgroud)

上面的代码呈现以下html:

<input id="datefilter" name="datefilter" type="text" value="2010-06-18" />
<input id="test" name="test" type="text" value="18/06/2010" />
Run Code Online (Sandbox Code Playgroud)

注意使用Html助手的第一行如何以一种方式产生日期格式,而第二种产生非常不同的输出.有什么想法吗?

注意:我目前在巴西,所以标准的短日期格式是dd/MM/yyyy.

Dar*_*rov 9

发生这种情况的原因是因为TextBox助手使用存储在其中的值,ViewData["datefilter"]因为它的名称是datefilter并且完全忽略了您传递的第二个参数,该参数应该格式化日期.尝试更改文本框的名称.

更好的解决方案是使用编辑器模板和强类型视图而不是ViewData.这是一个例子.

模型:

public class MyModel
{
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", 
                   ApplyFormatInEditMode = true)]
    public DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyModel
        {
            Date = DateTime.Now
        };
        return View(model);
    }
}
Run Code Online (Sandbox Code Playgroud)

视图:

<%@ 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>
Run Code Online (Sandbox Code Playgroud)