如何检查延迟加载属性是否返回null

时间:2014-08-19 15:18:17

标签: asp.net-mvc razor

我的MVC视图包含以下代码 -

@foreach (var d in Model.ItineraryDays)
    {
        <tr>
            <td>
                @Html.DisplayFor(model => d.DayPlus1)
            </td>
            <td>
                @Html.ActionLink(d.Listing.Name, "Details", "Port", new { Id = d.ListingId }, null)
            </td>
            <td>
                @if (d.Listing.Port.Country != null)
                    {
                        @Html.ActionLink(d.Listing.Port.Country.Name, "Details", "Country", new { Id = d.Listing.Port.Country.Id }, null)
                    }              
            </td>

当(d.Listing.Port.Country!= null)遇到空值时,它返回一个未设置为对象实例的&#39; Object引用。&#39;异常。

Port和Country都是延迟加载属性。如果&#39;国家&#39; != mull,然后&#39; Port&#39;必须有一个条目。 (并非所有列表都在Port中有一个条目,因此进行空检查。)

我的做法出了点问题,不确定是什么!

问候,盖伊

附录:存储库代码:

    public Itinerary GetItineraryFromId(int Id)
    {
        var itinerary = context.Itineraries
                .Include(i => i.ItineraryDays)
                .Include(i => i.ItineraryStartDates)
                .Where(i => i.Id == Id).FirstOrDefault();

        return(itinerary);
    }
  • 行程日有导航。性&gt;&GT;公共虚拟列表清单{get;设置;}
  • 列表包含nav。性&gt;&GT; public virtual Port Port {get;组; }
  • 港口有导航。 PROPERT&GT;&GT; public virtual Country Country {get;组; }

1 个答案:

答案 0 :(得分:0)

由于Port和Country都是延迟加载的,您需要在端口级别开始条件检查

 @if (d.Listing.Port != null) {
      if (d.Listing.Port.Country != null) {
           ... Do Something
      }
 } else {
      ... Handle null scenario
 }