3

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

4

1 回答 1

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>
于 2010-06-18T05:27:12.090 回答