2013-06-20 73 views
1

我試圖按照這一點,因爲它被引述在許多地方一個例子:MVC 4樹形視圖菜單

http://weblogs.asp.net/mikebosch/archive/2008/11/25/hierarchical-treeview-with-asp-net-mvc-jquery.aspx

,並使用mvc4沒有拿出應付給我下面的(一些變動2)

在控制器類:

public ActionResult Index() 
    { 

     MenuDBContext db = new MenuDBContext(); 
     ViewData["AllMenu"] = db.Menus.ToList(); 
     return View(db.Menus.ToList().Where(c => c.PId == null)); 

    } 

視圖類:

@{ 
    ViewBag.Title = "Index"; 
} 

@model IEnumerable<Geo.Models.Menu> 

<h2>Index</h2> 

@foreach (var item in Model) 
    { 
     <li> 
      @item 
      @{var children = ViewData["AllMenu"].Where(c => c.PId == item.Id);} 
      @if (children.Count() > 0) 
      { 
       <ul> 
        @{Html.RenderPartial("ItemControl", children);} 
      </ul> 

      } 
    </li> 
    } 

我不能爲我的生活制定出我爲什麼不能在ViewData [「AllMenu」]或.Count()上使用。任何提示我出錯的地方都會很棒。

回答

1

你需要轉換計算機[「AllMenu」]爲IEnumerable <

var children = (ViewData["AllMenu"] as IEnumerable<GeomantApp.Models.Menu>).Where(c => c.... 

ViewData的是Dictionary<string,object>所以當你嘗試並獲得從該字典的屬性,ASP.NET無法知道它是什麼方式如果你不先施放你的對象,你會發現編譯器錯誤。

+0

非常感謝!這解決了計數問題,但是。仍然無法工作,唯一顯示的選項是枚舉器,這對我來說沒有意義,因爲它可以使用。控制器類中的哪些地方? – user1857900

+0

如何轉換爲IEnumerable bluetoft

+0

'@ {var menuItems =(ViewData [「AllMenu」] as List );} @ {var children = menuItems.Where(c = > c.PId == item.Id);}'工作,但似乎略顯草率。 IEnumberable沒有,但感謝您的幫助! – user1857900