在我的ASP.net MVC应用程序中,我有一个看起来像这样的视图:
... <%=Html.TextBox("due")%> ...
我使用a ModelBinder
将帖子绑定到我的模型(到期属性是DateTime
类型).问题是当我将"01/01/2009"放入文本框时,帖子没有验证(由于其他数据输入不正确).活页夹以日期和时间 "01/01/2009 00:00:00 " 重新填充.
有没有办法告诉活页夹正确格式化日期(即ToShortDateString()
)?
我刚刚遇到了这个非常简单而优雅的解决方案,可以在MVC 2中找到:
http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx
基本上,如果您使用的是MVC 2.0,请在视图中使用以下内容.
<%=Html.LabelFor(m => m.due) %> <%=Html.EditorFor(m => m.due)%>
然后在/ Views/Shared/EditorTemplates中创建一个名为DateTime.ascx的局部视图
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <%=Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" }) %>
当调用EditorFor <>时,它将找到匹配的编辑器模板.
使用属性装饰模型中的DataType
属性,并指定其a Date
,而不是DateTime
:
public class Model { [DataType(DataType.Date)] public DateTime? Due { get; set; } }
你必须使用EditorFor
而不是TextBoxFor
在视图中:
@Html.EditorFor(m => m.Due)
这是一个肮脏的黑客,但它似乎工作.
<%= Html.TextBoxFor(model => model.SomeDate, new Dictionary{ { "Value", Model.SomeDate.ToShortDateString() } })%>
您获得了模型绑定,并且能够使用格式化字符串覆盖文本字段的HTML"value"属性.