foreach循环抛出null异常但对象不是

Sye*_*qas 8 .net c# asp.net-mvc razor asp.net-mvc-4

我有mvc 4母版页,我想在页面顶部显示用户特定菜单我正在检索用户数据

@using Agenda_MVC.Engine
@{

    List<Format> ContactEvents = Agenda_MVC.Classes.Utility.GetContactEventFormats(User.Identity.Name);
}
Run Code Online (Sandbox Code Playgroud)

但是当我遍历列表时它会抛出null异常,在设置断点时列表不为null它有项目.

@foreach (var ContactEvent in ContactEvents)
                {
                    <div class="@(ContactEvent.EventId == ViewContext.RouteData.Values["id"].ToString() ? "StaticMenuItemSelected" : "StaticMenuItem")">
                       @Html.ActionLink(ContactEvent.Name.Length > 15 ? ContactEvent.Name.Substring(0, 15) + "..." : ContactEvent.Name, "Agenda", "Portal", new { id = ContactEvent.EventId }, new { @title = ContactEvent.Name })
                    </div>    
                }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不知道我做错了什么.


方法的代码如下,我正在从Web服务中检索它

public static List<Format> GetContactEventFormats(string ContactId)
{
    //List<Format> EventFormats = HttpContext.Current.Cache["EventFormats" + ContactId] as List<Format>;
    List<Format> EventFormats = HttpContext.Current.Session["EventFormats" + ContactId] as List<Format>;

    if (EventFormats == null)
    {
        EngineClient EngClient = Params.GetEngineClient();
        EventFormats = EngClient.GetContactEventFormats(ContactId);

        if (EventFormats != null && EventFormats.Count > 0)
        {
            //HttpContext.Current.Cache.Insert("EventFormats" + ContactId, EventFormats, null, DateTime.Now.AddMinutes(30), TimeSpan.Zero);
            HttpContext.Current.Session["EventFormats" + ContactId] = EventFormats;
        }
    }

    return EventFormats == null ? new List<Format>() : EventFormats;
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*ren 4

我假设ContactEvent.NameorEventId为空

debugger您可以在将 ContactEvent.Name 分配给值之前通过指定条件来检查这两个值是否都为 null ActionLink

<div class="@(ContactEvent.EventId == ViewContext.RouteData.Values["id"].ToString() ? "StaticMenuItemSelected" : "StaticMenuItem")">

                @if (ContactEvent.Name != null) {
                   @Html.ActionLink(ContactEvent.Name.Length > 15 ? ContactEvent.Name.Substring(0, 15) + "..." : ContactEvent.Name, "Agenda", "Portal", new { id = ContactEvent.EventId }, new { @title = ContactEvent.Name })
                }
                </div>   
Run Code Online (Sandbox Code Playgroud)