Asp.net mvc MVC Razor视图-如果不为空,则显示修改的日期而不是创建的日期
在MVC核心视图中,我试图显示修改的日期,而不是创建的日期,如果它不是空的 所以,我写了如下Asp.net mvc MVC Razor视图-如果不为空,则显示修改的日期而不是创建的日期,asp.net-mvc,razor,asp.net-core-mvc,Asp.net Mvc,Razor,Asp.net Core Mvc,在MVC核心视图中,我试图显示修改的日期,而不是创建的日期,如果它不是空的 所以,我写了如下 @Html.DisplayFor(modelItem => (item.DateModified.HasValue ? item.DateModified : item.DateCreated)) 但是我说的是个错误 Templates can be used only with field access, property access, single-dimension array inde
@Html.DisplayFor(modelItem => (item.DateModified.HasValue ? item.DateModified : item.DateCreated))
但是我说的是个错误
Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions
因此,我将其改为以下内容,它可以正常工作
@(item.DateModified.HasValue ? item.DateModified.Value.ToString("dd/MM/yyyy") : item.DateCreated.ToString("dd/MM/yyyy"))
然而,问题是我必须重新指定我在模型声明中已经指定的日期格式。如果不是,它将以dd/MM/yyyy HH:MM:ss格式显示数据,因为我不再使用DisplayFor
另一种可能性是,我可以使用ViewModel并添加一个新属性来处理这种特殊文本
我可以知道是否有更好的方法来处理这种情况吗?您可以在视图模型中使用以下helper属性,它将处理您的问题和格式设置
//Considering your DateCreated is not nullable
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DisplayDate
{
get { return DateModified.HasValue ? DateModified.Value : DateCreated; }
}
您建议的视图模型可能性是处理此问题的最佳方法。视图模型总是最好的,但您可以始终使用@if item.DateModified.HasValue{@Html.DisplayForm=>item.DateModified}else{@Html.DisplayForm=>item.DateCreated}在模型中使用helper属性似乎比在视图中放置逻辑更好。我是否遗漏了什么?除非我放入[DisplayFormatDataFormatString={0:dd/MM/yyyy}],否则它不会以正确的格式显示。是的,您还必须修饰DisplayFormat属性