显示ShortDateString

时间:2012-07-12 21:29:05

标签: jquery asp.net-mvc

在我的ASP.NET MVC应用程序中,我试图显示只显示UI上的日期部分。 model.SomeDate是DateTime值。

我尝试了以下内容:

<%= Html.TextBoxFor( model => model.SomeDate, new { @Value = Model.SomeDate.ToShortDateString() } )%>

但它不会编译,错误是: System.Nullable不包含'ToShortDateString'的定义,也没有扩展方法......

如何让它在UI上运行?

2 个答案:

答案 0 :(得分:1)

使用

(Model.SomeDate.HasValue)?Model.SomeDate.Value.ToShortDateString():""

而不是

Model.SomeDate.ToShortDateString()

即:

<%= Html.TextBoxFor( model => 
     model.SomeDate, new { 
     @Value = Model.SomeDate.Value.ToShortDateString() 
   })
%>

答案 1 :(得分:0)

您可以使用编辑器模板。

在您的视图模型上:

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime? SomeDate { get; set; }

并在您的观点上:

<%= Html.EditorFor(x => x.SomeDate) %>

如果由于某种原因设计此应用程序的人没有使用视图模型并决定直接将他的域模型传递给视图而您无法修改这些域模型,则可以在视图中执行此操作:

<%= Html.EditorFor(x => x.SomeDate, "ShortDate") %>

然后定义自定义编辑器模板(~/Views/Shared/EditorTemplates/ShortDate.ascx):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
<%= Html.TextBox(
    "", 
    Model.HasValue ? Model.Value.ToString("d") : "",
    new { @class = "text-box single-line" }
) %>