6

参考这篇文章中的答案,我添加了 /Views/Shared/DisplayTemplates 并添加了一个名为 ShortDateTime.cshtml 的局部视图,如下所示:

@model System.DateTime
@Model.ToShortDateString()

当模型包含一个值时,它会起作用并且格式化的日期会正确显示:

@Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime")

但是,如果返回空值,则会引发“System.InvalidOperationException”。表示:

{“传入字典的模型项为空,但该字典需要一个非空的‘System.DateTime’类型的模型项。”}

我的第一个倾向是在局部视图中使用 if 语句,但这似乎并不重要。在不引用模板的情况下,空值的处理方式如下:

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

但格式化的原始问题仍然存在。当我尝试按如下方式在视图中放置条件格式时,它不起作用,但我希望它只是一个语法问题。

@Html.DisplayFor(modelItem => item.BirthDate == null) ? string.Empty : (modelItem => item.BirthDate, "ShortDateTime"))

以上导致不同的“System.InvalidOperationException”:

{"模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。"}

那么,有没有办法在 View 中进行条件格式化以仅从 DateTime 值生成日期?

4

4 回答 4

4

您遇到的问题是您将一个null值传递给一个不可为空的模型。将局部视图的模型更改为DateTime?. 例如:

@model DateTime?          
@if (!Model.HasValue)
    {
    <text></text>
}
else
{
    @Model.Value.ToShortDateString()
}

希望这可以帮助。

于 2013-11-12T04:31:17.013 回答
1

你试过这个吗?

@if (modelItem.BirthDate != null) { Html.DisplayFor(modelItem => item.BirthDate, "ShortDateTime") }
于 2013-11-12T04:07:15.570 回答
0

我想您应该在模型类中将 BirthDate 属性声明为可为空

public DateTime? BirthDate{ get; set; }

你必须声明为

public DateTime BirthDate{ get; set; }

这将期望每次都有一个值。

如果您设置为可为空,则它不会期望值。

于 2013-11-12T04:16:53.180 回答
0

通过在 Html 帮助程序之前应用条件语句,仅传递非空值。

@if (item.BirthDate != null) { @Html.DisplayFor(modelItem => item.BirthDate , "ShortDateTime")}
于 2013-11-12T17:37:53.777 回答