我正在使用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)
有什么想法吗?
感谢。
答案 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 框架,所以不确定这些天是如何分类或称为的。
希望这可以帮助其他人在以后遇到这个问题。