2010-09-10 71 views
2

我有一个Person类定义为格式为空的日期时间字段

[DisplayName("Born Date")] 
public DateTime? BornDate { get; set; } 

我用这个领域,我认为作为

<td style="white-space:nowrap"> 
    <%= Html.LabelFor(model => model.BornDate)%> 
    <br /> 
    <%= Html.TextBoxFor(model => model.BornDate, new { id = "bornDate" })%> 
    <%= Html.ValidationMessageFor(model => model.BornDate, "*")%> 
</td> 

的问题是在我的模型BornDate属性当我编辑一个Person实例与BornDate文本框被格式化为

dd/MM/yyyy hh.mm.ss 

虽然我会喜欢在没有时间部分(“dd/MM/yyyy”)的情况下对其进行格式化。我无法使用带格式字符串的toString方法,因为它是可以为空的字段。

我该怎么办?

+0

好的例子也在这里http://stackoverflow.com/questions/12633471 – Azoro 2013-01-03 11:52:58

+0

关于同样的问题的好例子可以在这里找到http://stackoverflow.com/questions/12633471 – Azoro 2013-01-03 11:54:52

回答

10

您应该可以使用Value。只需检查它是否为空。

var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate"; 
+0

首先感谢您的回应。我必须在哪里放置这些代码?如果我将它放在TextBoxFor函数中,在lambda表达式中,我会得到一个InvalidOperationException“模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。” – Lorenzo 2010-09-10 12:07:17

+1

Hrm ...是的,我忘记了你使用强类型助手的事实。我认为唯一的方法就是使用TextBox助手:<%= Html.TextBox(“date”,Model.BornDate.Value.ToString(“yyyy”),new {id =“bornDate”})%> – 2010-09-10 12:36:01

+0

好!这肯定会起作用......谢谢! – Lorenzo 2010-09-10 13:05:00

9

我知道这是很晚,但我正在研究另一个问题,并遇到了这个问题。有一种方法只显示不需要表示层格式的日期部分。

[DisplayName("Born Date")] 
[DataType(DataType.Date)] 
public DateTime? BornDate { get; set; } 

使用,这将确保你处处绑定到您查看该属性,只有日期会显示

希望这有助于有人

1

你可以做到这一点,将可空模型工作类型:

@model DateTime? 
@{ 
    object txtVal = ""; 
    if (Model.HasValue) 
    { 
     txtVal = Model.Value; 
    }; 
} 
@Html.TextBoxFor(x => Model, new {Value = string.Format(ViewData.ModelMetadata.EditFormatString, txtVal)) 
5

要在你看来做到这一点,你可以用剃刀语法,以及:

 
@Html.TextBox("BornDate", item.BornDate.HasValue ? item.BornDate.Value.ToShortDateString():"") 
+0

我应该如何使用DisplayFor? – CMMaung 2013-06-24 02:21:29