在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>
}