如何格式化视图中的日期以便在MVC 2中进行双向绑定?

时间:2010-03-29 14:32:17

标签: asp.net-mvc asp.net-mvc-2

所以,假设我有一个访问日期的视图:

<%= Html.TextBoxFor(model => Model.Birthday) %>

如何让我的观点决定日期的格式?我想使用common formatting options,重要的是这是双向的(包括显示和数据输入)。

3 个答案:

答案 0 :(得分:4)

在您的模型中,您可以使用System.ComponentModel.DataAnnotations元数据来指定您希望该属性的格式。例如

[DisplayFormat(DataFormatString="{0:MM/dd/yyyy}")]
public DateTime Birthday { get; set; }

Then, in your view, use:
<%= Html.EditorFor(model => model.Birthday) %>

不幸的是,常规HTML帮助程序不尊重元数据,因此您必须使用Html.EditorFor。

答案 1 :(得分:2)

使用特定的ViewModel类,该类具有您希望生日的格式的字符串,并使用该字符串在文本框中显示。当您发布表单时,如果您使用域对象本身的默认绑定,它应该为您解析字符串。如果您使用的是ViewModel,则必须在发布表单时对其进行解析。

答案 2 :(得分:0)

我很惊讶地发现你不能只在Html.EditorFor()中抛出一个格式字符串。我已经开始使用EditorTemplates了。

在解决方案中创建目录结构。

观看次数&gt;分享&gt; EditorTemplates

在EditorTemplates文件夹中添加新的MVC 2用户控件,并将其命名为DateTime.ascx。 Html.EditorFor(DateTime)现在将使用此用户控件进行显示。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
<%= Html.TextBox(string.Empty, (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty)) %>