2010-11-20 22 views
0

我對asp比較陌生,並且有這個愚蠢的問題,它一直返回null。這是我認爲非常簡單的功能。我一直在讀史蒂文桑德森的書,這非常有幫助。反正這裏是我的功能,我將解釋之後將對象傳遞給具有ASP MVC的類。新手!

public ActionResult Menu(string page) 
    { 
     Func<Pages, NavLink> makeLink = parentPage => new NavLink 
     { 
      Text = parentPage.PageTitle ?? "Home", 
      RouteValues = new RouteValueDictionary(new 
      { 
       controller = "Pages", 
       action = "List", 
      }), 
      IsSelected = (parentPage.PageTitle == page), 
      IsFirst = (parentPage.PageOrder == 1) 
     }; 

     List<NavLink> navlinks = new List<NavLink>(); 
     navlinks.Add(makeLink(null)); 

     foreach (var parent in pagesRepository.Pages.Where(x => x.PageParent == 0).OrderBy(x => x.PageOrder)) 
     { 
       navlinks.Add(makeLink(parent)); 
     } 

     return View(navlinks); 
    } 

上述功能產生以下錯誤System.NullReferenceException:未設置爲一個對象的實例對象引用。

如果我傳遞一個字符串,而不是我的頁面類,它的工作原理,但我需要訪問我的頁面類的一些屬性,以返回基本值。以下功能不會返回錯誤

public ActionResult Menu(string page) 
    { 
     Func<string, NavLink> makeLink = parentPage => new NavLink 
     { 
      Text = parentPage ?? "Home", 
      RouteValues = new RouteValueDictionary(new 
      { 
       controller = "Pages", 
       action = "List", 
      }), 
      IsSelected = (parentPage == page) 
     }; 

     List<NavLink> navlinks = new List<NavLink>(); 
     navlinks.Add(makeLink(null)); 

     foreach (var parent in pagesRepository.Pages.Where(x => x.PageParent == 0).OrderBy(x => x.PageOrder)) 
     { 
       navlinks.Add(makeLink(parent.PageTitle)); 
     } 

     return View(navlinks); 
    } 

謝謝,您的幫助將不勝感激!

navlinks.Add(makeLink(null)); 

所以你必須警惕這一點::

Func<Pages, NavLink> makeLink = parentPage => new NavLink 
{ 
    Text = (parentPage != null) ? (parentPage.PageTitle ?? "Home") : "", 
    RouteValues = new RouteValueDictionary(new 
    { 
     controller = "Pages", 
     action = "List", 
    }), 
    IsSelected = (parentPage != null) ? (parentPage.PageTitle == page) : false, 
    IsFirst = (parentPage != null) ? (parentPage.PageOrder == 1) : 0 
}; 

甚至根本不會用空參數調用它

回答

2

您在這裏當調用函數傳遞null。因此,而不是:

List<NavLink> navlinks = new List<NavLink>(); 
navlinks.Add(makeLink(null)); 

foreach (var parent in pagesRepository.Pages.Where(x => x.PageParent == 0).OrderBy(x => x.PageOrder)) 
{ 
     navlinks.Add(makeLink(parent)); 
} 

return View(navLinks); 

你根本就:

var navlinks = pagesRepository 
    .Pages 
    .Where(x => x.PageParent == 0) 
    .OrderBy(x => x.PageOrder) 
    .Select(makeLink); 
return View(navLinks); 
+0

不敢相信的錯誤。你是一個天才和證明,爲什麼我不應該深夜編程!謝謝Darin! – Tyrone 2010-11-21 05:27:35