我在视图中显示了值列表。它工作正常,但我只需要获得第一个字符。我使用Substring来实现它并且它正常工作,在另一种情况下我将它用于我的列表的其他值,但它不起作用。我收到了这个错误
System.NullReferenceException:未将对象引用设置为对象的实例。
Html代码:
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.LeadName</td>
<td>@item.CarrierCode</td>
<td>@item.OrderRef.Substring(0, 5)...</td>
<td>@item.Carrier</td>
<td>@item.Ref</td>
<td>@item.TicketRef.Substring(0, 5)</td>
<td>@item.NoofNts</td>
<td>@item.DebtorCode</td>
<td>@item.InvDate.ToString("d")</td>
</tr>
}
</tbody>
&#34; OrderRef&#34;工作正常,另一个(TicketRef)不能使用子串,但没有它就可以工作。
答案 0 :(得分:2)
听起来像TicketRef是空的。
我喜欢使用“NullSafe”扩展名(来自here)来处理这类事情:
<td>@item.TicketRef.NullSafe(s => s.Substring(0, 5))...</td>
public static TResult NullSafe<TObj, TResult>(
this TObj obj,
Func<TObj, TResult> func,
TResult ifNullReturn = default(TResult))
{
return obj != null ? func(obj) : ifNullReturn;
}
答案 1 :(得分:0)
直到您的注释,只有当您使用Substring时才会出现错误,这意味着OrderRef
为空,尝试通过尝试捕获代码来捕获NullReferenceException以查看确切的错误。
答案 2 :(得分:0)
在这种情况下,某些属性值为null。所以你需要在调用substring之前检查一下。如果调整了样本,以便在将OrderRef
属性写入输出之前进行检查。您可以相应地调整Substring
在代码中不起作用的位置。
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.LeadName</td>
<td>@item.CarrierCode</td>
<td>
@if(item.OrderRef != null)
{
@item.OrderRef.Substring(0, 5)
@Html.Raw("...");
}
</td>
<td>@item.Carrier</td>
<td>@item.Ref</td>
<td>@item.TicketRef</td>
<td>@item.NoofNts</td>
<td>@item.DebtorCode</td>
<td>@item.InvDate.ToString("d")</td>
</tr>
}
</tbody>
作为一般方法,请在NullReferenceExceptions上阅读这篇优秀的post以及如何修复它们。