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.
发生这种情况的原因是因为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)
| 归档时间: |
|
| 查看次数: |
6321 次 |
| 最近记录: |