参考这个帖子中的答案,我添加了/Views/Shared/DisplayTemplates并添加了一个名为ShortDateTime.cshtml的局部视图,如下所示:
@model System.DateTime
@Model.ToShortDateString()
当模型包含一个值时,这个方法可以正常工作并且格式化后的日期会正确显示:
@Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime")
然而,如果返回一个空值,则会抛出“System.InvalidOperationException”异常。这表示:
{"字典中传递的模型项为 null,但该字典需要一个类型为 'System.DateTime' 的非 null 模型项。"}
我的第一个想法是在局部视图中使用 if 语句,但似乎并没有关系。不引用模板,则处理空值的方式如下:
@Html.DisplayFor(modelItem => item.BirthDate)
但是格式问题仍然存在。当我尝试在视图中添加条件格式时,它不起作用,但我希望这只是语法的问题。
@Html.DisplayFor(modelItem => item.BirthDate == null) ? string.Empty : (modelItem => item.BirthDate, "ShortDateTime"))
以上结果会导致不同的 'System.InvalidOperationException':
{"模板只能与字段访问、属性访问、单维数组索引或单参数自定义索引器表达式一起使用。"}
那么,是否有一种在视图中进行条件格式化以从DateTime值中生成仅日期的方法?
DateTime?
。这就是HasValue
方法的来源。 - Vinney Kelly