2013-05-06 33 views
1

我想在MVC4中構建一個WordPress版本。目前我正在處理頁面視圖。 我已經決定在這個視圖中我還應該包含一個已經創建的所有其他頁面的菜單。 這是我的SHOWPAGE觀點方法:如何在獲取模型對象的視圖中調用期望獲得IEnumerable集合的分部視圖?

public ActionResult showPage(string myTitle) 
    { 

      var query = from a in db.Pages 
         where a.title == myTitle 
         select a; 

      PageModels item = new PageModels(); 
      item = query.FirstOrDefault<PageModels>(); 
      if (item != null) 
      { 
       return View(item); 
      } 
      else 
      { 
       item.content = "No page with title :" + myTitle + " found."; 
       return View(item); 
      } 

    } 

這是我對部分我試圖渲染方法:

public ActionResult List() 
    { 
     return View(db.Pages.ToList()); 
    } 

這是我的看法是如何的樣子:

@model Dynamic_Web_Pages.Models.PageModels 
@{ 
    ViewBag.Title = "Page Preview"; 
} 

@Html.Partial("_ListPartial", new IEnumerable<Dynamic_Web_Pages.Models.PageModels>) 
<div class="content">@Html.Raw(Model.content)</div> 

最後這是我的部分:

@model IEnumerable<Dynamic_Web_Pages.Models.PageModels> 

<div class="dropdown"> 
@foreach (var page in Model) 
{ 
    if(page.parent == 0) 
    { 
     <div class="btn-group"> 
      <a class="btn dropdown-toggle" id="@Html.DisplayFor(modelItem => page.id)" role="button" data-toggle="dropdown" data-target="#" href="/@Html.DisplayFor(modelItem => page.title)" >@Html.DisplayFor(modelItem => page.title) 
       <b class="caret"></b> 
      </a> 

      <ul class="dropdown-menu" role="menu" aria-labelledby="@Html.DisplayFor(modelItem => page.id)"> 
      @foreach (var child in Model) 
      {  
       if (child.parent == page.id) 
       { 
        <li><a class="child" href="/@Html.DisplayFor(modelItem => child.title)" >@Html.DisplayFor(modelItem => child.title)</a></li> 
       }  
      } 
      </ul>  
     </div> 
    } 
} 
</div> 

我碰到下面的錯誤在我看來:

Cannot create an instance of the abstract class or interface 'System.Collections.Generic.IEnumerable<Dynamic_Web_Pages.Models.PageModels>' 

應該是什麼// @ Html.Partial的是第二個參數?

+0

你似乎在你的問題將被混合的東西。你打算從你的視角傳遞一些對象到你的局部視圖嗎?如果是的話那些對象會是什麼?或者你只是想從視圖中調用並渲染這部分內容? – 2013-05-06 12:08:51

+0

我的完整視圖接收一個對象,特別是標題與該方法的參數相匹配的頁面。我的部分視圖應接收所有頁面並將其顯示爲導航菜單。 – AlexG 2013-05-06 12:17:25

+0

好吧,就我理解的方式而言,您不需要將某些對象從完整視圖傳遞到您的局部視圖。這就是爲什麼你向我們展示'List'方法。那就是你希望你的部分觀點來自哪裏? – 2013-05-06 12:20:48

回答

1

您的看法接受單一實例PageModels

@model Dynamic_Web_Pages.Models.PageModels 
@{ 
    ViewBag.Title = "Page Preview"; 
} 

,然而你在接受IEnumerable的部分中傳遞了這個信息,所以你得到了這個異常。

現在,基於我們對您的意見的談話,您可以加載使用jQuery部分:

<script> 
$("#navmenu").load('@Url.Action("List")'); 
</script> 

在那裏你將這段代碼:

@Html.Partial("_ListPartial", new IEnumerable<Dynamic_Web_Pages.Models.PageModels>) 
// with this 
<div id="navmenu"></div> 
+0

它完美的作品。我得到一個JavaScript錯誤:未捕獲TypeError:對象[對象對象]沒有方法'下拉'...這是奇怪的,因爲我的下拉菜單似乎仍然工作。我試圖加載部分第一,然後調用下拉功能,但我得到了同樣的錯誤。不管怎麼說,還是要謝謝你。 – AlexG 2013-05-06 12:36:35

+0

不客氣。你從哪裏得到那個錯誤?調試是否顯示錯誤發生在哪一行? – 2013-05-06 13:06:18

1

消除新的IEnumerable ,只是把它作爲

Html.Partial( 「_ ListPartial」)在視圖

+0

我試過了,我仍然得到一個錯誤,說我的部分期望的是一個集合,而不是獲得一個模型。 – AlexG 2013-05-06 12:01:15

-1

所以,你應該返回,而不是觀點PartialView看到下面的代碼

public ActionResult List() 
{ 
    return PartialView (db.Pages.ToList()); 
} 
+0

我仍然得到相同的錯誤。 – AlexG 2013-05-06 12:20:47

相關問題