1

我试图遵循这一点,因为它在许多地方被引用为示例:

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"] 上使用 .Where 或对儿童使用 .Count() 。任何关于我哪里出错的提示都会很棒。

4

1 回答 1

1

您需要将 ViewData["AllMenu"] 转换为 IEnumerable<

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

ViewData 就是Dictionary<string,object>这样,当您尝试从该字典中获取属性时,ASP.NET 无法事先知道它是什么,因此如果您不先转换对象,则会出现编译器错误。

于 2013-06-20T21:39:25.350 回答