在同一页面上多次调用控制器

时间:2014-03-05 10:37:26

标签: c# asp.net asp.net-mvc-4

我有一个模型,可以为我的网页加载补充工具栏,以及一个加载主要内容的模型。每个页面的内容模型都不同,而侧栏模型将保持不变。用户点击链接会更改内容模型:

~/Home/About
~/Home/Contact

我理想情况下想在_Layout.cshtml中添加一行代码来加载一个返回显示补充工具栏模型的PartialView的Controller。所以我们可能会:

<div id="sidebar">
   @Html.Render("~/SidebarController/GetSidebar");
</div>
<div id="content">
   @RenderBody()
</div>

但我知道这不行。我如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

我要做的是在@Html.Action("GetSidebar")文件中使用_Layout.cshtml,然后您可以在控制器中执行操作

    public ActionResult GetSidebar()
    {
        //do stuff, populate menu items from database? etc

        // Pass the data to the partial view
        return PartialView("_Sidebar");
    }

你需要在每个控制器中使用它,除非你把它放在一个基本控制器中,然后你可以在所有其他控制器上继承它并将[ChildActionOnly]添加到你的行动的顶部,这样就不能直接打电话。

答案 1 :(得分:1)

我做同样的事情。我用:

@Html.Action("GetSidebar", "SidebarController")

绘制我的侧栏,它工作正常。我在更改视图时使用了ajax调用,以便一次又一次地加载侧边栏,并且我有ajax目标,“content”div用代表每个页面的局部视图替换其内容。