ASP.Net MVC Razor从DateTime属性中删除时间

时间:2012-06-20 14:48:51

标签: asp.net-mvc-3 datetime razor

我正在使用Razor Views开发ASP.Net MVC 3 Web应用程序。我有以下ViewModel,它传递给我的Razor View并迭代以显示记录列表。

视图模型

public class ViewModelLocumEmpList
{
    public IList<FormEmployment> LocumEmploymentList {get; set;}
}

查看

<table>
  <tr>
   <th>Employer</th>
   <th>Date</th>
   </tr>
    @foreach (var item in Model.LocumEmploymentList) {
      <tr>
        <td>@item.employerName</td>
        <td>@item.startDate</td>
      </tr>
      }
      </table>

我的问题是该行

@Html.DisplayFor(modelItem => item.startDate)

返回类似 20/06/2012 00:00:00 的日期,我希望删除时间并只显示日期,即 20/06 / 2012

我尝试过添加

@Html.DisplayFor(modelItem => item.startDate.Value.ToShortDateString())

DisplayFor(modelItem => item.startDate.HasValue ? item.startDate.Value.ToShortDateString(): "")

但是,它们都在运行时返回以下错误消息

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

我在这里看了Darin Dimitrov的答案Converting DateTime format using razor

但是,我无法访问ViewModel中的startDate属性,我的ViewModel返回一个Formistmployment对象的IList,您可以在上面看到。

如果有人知道如何从日期时间属性中删除时间,那么我将非常感激。

感谢。

另外,我的startDate属性是Nullable。

更新

根据PinnyM的回答,我添加了一个部分类(见下文),将[DisplayFormat]属性放在startDate属性上。

public partial class FormEmployment
{
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public Nullable<System.DateTime> startDate { get; set; }
}

但是,我的Razor View仍然使用以下代码显示 20/06/2012 00:00:00

@Html.DisplayFor(modelItem => item.startDate)

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:27)

您可以使用@item.startDate.Value.ToShortDateString()(为空值添加适当的验证)

答案 1 :(得分:6)

您可以在模型startDate属性中使用DisplayFormat属性:

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

只需使用DisplayFor(modelItem => item.startDate)

另一种选择是为格式化创建只读属性:

public String startDateFormatted { get { return String.Format("{0:dd/MM/yyyy}", startDate); } }

并使用DisplayFor(modelItem => item.startDateFormatted)

答案 2 :(得分:0)

对我来说,我能够做一些类似于上述答案的事情,但使用“值”属性不断出错。

<td>
@item.DOB.ToShortDateString()
</td>

其他需要注意的事情:我正在使用 ASP.Net Core MVC 和 .NET 5 框架,所以不确定这些天是如何分类或称为的。

希望这可以帮助其他人在以后遇到这个问题。