Reputation: 679
I'm working on MVC project and I'm looping some values, and sometimes ome of those values is null:
What can I write and how can I write ?? operator or whatever in case @Item.User_class.User1.Nickname
is null to set some default values.
Code:
@foreach (var item in ViewBag.nextClassesList)
{
<tr class="@item.Status">
<td>@item.ClassDate</td>
<td>@item.User_Class.User1.NickName ? @item.User_Class.User.NickName </td>
<td>@item.User_Class.ClassType.ClassTypeName.Name (@item.User_Class.ClassType.ClassTypeName.Time min)</td>
</tr>
}
So this line is problem:
<td>@item.User_Class.User1.NickName ? @item.User_Class.User.NickName </td>
<td>@item.User_Class.User1.NickName </td> Is null sometimes...
Upvotes: 1
Views: 11070
Reputation: 6520
For every property that is an object under your @item, you need to perform null checks down to a simple property level
(@item.User_Class == null) ? string.Empty : (@item.User_Class.User1 == null) ? (@item.User_Class.User == null) ? string.Empty : @item.User_Class.User.NickName : @item.User_Class.User1.NickName
you need to also check the User object as well as it could also be null.
(@item.User_Class == null) ? string.Empty : (@item.User_Class.ClassTypeName == null) ? string.Empty : @item.User_Class.ClassTypeName.Name
so in your example
@foreach (var item in ViewBag.nextClassesList)
{
<tr class="@item.Status">
<td>@item.ClassDate</td>
<td>(@item.User_Class == null) ? string.Empty : (@item.User_Class.User1 == null) ? (@item.User_Class.User == null) ? string.Empty : @item.User_Class.User.NickName : @item.User_Class.User1.NickName</td>
...
}
Syntax may be a little off, but you get the idea.
Upvotes: 1
Reputation: 2358
You can use the null conditional ,available in C# version 6.0 and above:
@item?.User_Class?.ClassTypeName?.Name
Upvotes: 1