如果值为null,则在我的视图中显示值会引发ToString错误



在asp.net核心的视图中,我正试图在@foreach中显示我的值。这是

@foreach (var item in Model)
{
<tr>
<td>@item.FirstName</td>
<td>@item.LastName</td>
<td>@item.Birthdate.Value.ToString("d")</td>
<td>@item.Startdate.Value.ToString("d")</td>
</tr>
}

Startdate中存在空值时,这会引发数据库错误。

如果我将@item.Startdate.Value.ToString("d")更改为

CCD_ 4,我再也不明白这个错误了。我的所有属性都可以为null。

我的困惑是,我认为如果我使用.Value.ToString("whatever"),这将确保有一个值,如果有,那么它将ToString(),如果没有值,那么它会将其留空,什么都不会发生。

我的问题是,如果视图中的值不为null,我如何才能ToString,否则忽略它?

如果您的Nullable没有值(HasValue为false(,则请求其Value是无效操作,并且如果您的代码直接使用Nullable的.Value而不首先检查它,则您可能可以跳过使用nullables!:(

Nullable背后的想法是帮助处理一种情况,即拥有不可能为null的东西,然后需要一种方法使其为null,因为它是";不可避免的";但你需要检查,对于你使用它的每一种情况,它是否有价值,并采取适当的

如果你想有一个可能有值也可能没有值的null,并且你想盲调用它上的某个东西并知道你有值,那么你需要这样的东西:

item.Startdate.GetValueOrDefault(DateTime.MinValue).ToString("d")

如果没有当前值,您必须决定使用什么值。您可以通过使用null传播程序来快捷处理:

item.Startdate?.ToString("d")

如果nullable没有值,那么整个计算结果为null。如果它有一个值,它的计算结果为DateTime(或可为null的任何类型(,即ToString'd。您只能在允许null的上下文中使用它,例如设置文本框的文本

当它评估为null时,它也可能是null合并:

item.Startdate?.ToString("d") ?? DateTime.MinValue.ToString("d")

这种方法的较短变体是将可为null的日期时间与实际日期时间合并,然后字符串显示结果:

(item.Startdate ?? DateTime.MinValue).ToString("d")

最后一种形式的工作原理与早期的GetValueOfDefault变体类似,只是??直到最近才成为一种东西;GVOD()是一种老得多的

尝试以下代码。你也可以遵循同样的生日。

@foreach (var item in Model)
{
var sDate = item.Startdate.HasValue ? item.Startdate.Value.ToString("d") : "";
<tr>
<td>@item.FirstName</td>
<td>@item.LastName</td>
<td>@item.Birthdate.Value.ToString("d")</td>
<td>@sDate </td>
</tr>
}

相关内容

最新更新