我想在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的是第二個參數?
你似乎在你的問題將被混合的東西。你打算從你的視角傳遞一些對象到你的局部視圖嗎?如果是的話那些對象會是什麼?或者你只是想從視圖中調用並渲染這部分內容? – 2013-05-06 12:08:51
我的完整視圖接收一個對象,特別是標題與該方法的參數相匹配的頁面。我的部分視圖應接收所有頁面並將其顯示爲導航菜單。 – AlexG 2013-05-06 12:17:25
好吧,就我理解的方式而言,您不需要將某些對象從完整視圖傳遞到您的局部視圖。這就是爲什麼你向我們展示'List'方法。那就是你希望你的部分觀點來自哪裏? – 2013-05-06 12:20:48