1

我正在尝试在 MVC4 中构建一个 WordPress 版本。目前我正在处理页面视图。我决定在这个视图中我还应该包含一个包含所有其他已创建页面的菜单。这是我的 showPage 视图方法:

    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 的第二个参数应该是什么?

4

3 回答 3

1

删除新的 IEnumerable 并将其保留为

视图中的 Html.Partial("_ListPartial")

于 2013-05-06T11:58:43.340 回答
1

您的视图接受了一个实例PageModels

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

但是您在接受 an 的部分中传递了它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>
于 2013-05-06T12:28:38.713 回答
-1

所以你应该返回 PartialView 而不是 view 见下面的代码

 public ActionResult List()
{
    return PartialView (db.Pages.ToList());
}
于 2013-05-06T12:08:44.450 回答