1

我想使用 MVC 和 renderpartial 来生成一个菜单,但无法让它工作,从我读到的内容看来 RenderAction 可能更合适。我仍然没有让它工作。

我打算做的是创建一个控制器,从数据库中选择某些文章作为类别(这被放入 HomeController):

public ActionResult MenuController()
    {
        var movies = from m in db.Art
                     where m.ArtikelNr.StartsWith("Webcat")
                     select m;
        return View(movies);
    }

然后将该信息发送到视图:

@model IEnumerable<xxxx.Models.Art>
@{
Layout = null;
}

<ul>
@foreach (var item in Model)
{
<li>@Html.DisplayFor(modelItem => item.Benämning_10)</li>
}

当我将它作为普通控制器运行并查看时,它会起作用,它会返回我想要的列表。但是如果我想从 _layout.cshtml 中调用它(因为这个菜单应该出现在每个页面上),如下所示:

<div id="sidebar">@Html.RenderAction(MenuController)</div>

然后它会生成以下错误:

CS0103: The name 'MenuController' does not exist in the current context

从 _layout.cshtml 文件中调用操作/视图/任何内容的正确方法是什么?

4

4 回答 4

1

你应该打电话

@Html.RenderAction("_MenuController")

并确保您的 Global.asax 中有一个有效的规则

正如另一个答案中所建议的那样,最好使用

return PartialView();

我还建议您使用ChildActionOnlyAttribute以确保此操作永远不会被称为标准操作。

所以是这样的:

[ChildActionOnly]
public PartialViewResult _MenuController()
{
    var movies = from m in db.Art
                 where m.ArtikelNr.StartsWith("Webcat")
                 select m;
    return PartialView(movies);
}
于 2012-02-08T11:16:27.767 回答
1
@{Html.RenderAction("MenuController");} 

或者

@Html.Action("MenuController")
于 2012-02-08T13:50:42.670 回答
0

简单地

@Html.RenderAction("菜单控制器")

您忘记了字符串参数周围的引号

于 2012-02-08T11:13:17.127 回答
0
<div id="sidebar">@Html.RenderAction("_MenuController")</div>

在您的操作名称周围加上引号 :) 返回部分视图也可能是一种好习惯:

return PartialView(movies);
于 2012-02-08T11:14:53.330 回答