1

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

我尝试了以下方法:

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

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

我怎样才能让它在 UI 上工作?

4

2 回答 2

1

采用

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

代替

Model.SomeDate.ToShortDateString()

IE:

<%= Html.TextBoxFor( model => 
     model.SomeDate, new { 
     @Value = Model.SomeDate.Value.ToShortDateString() 
   })
%>
于 2012-07-12T21:31:22.563 回答
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" }
) %>
于 2012-07-12T21:39:07.143 回答