从其他控制器渲染局部视图

时间:2011-11-01 14:47:12

标签: c# asp.net-mvc asp.net-mvc-3 razor partial-views

有没有办法在我的控制器视图中呈现 A 来自其他控制器 B 的局部视图?

编辑:我写了一个仅适用于两个控制器的部分视图,我不想将其复制到两个视图文件夹中。
我希望每次呈现视图时都不会显示部分视图。

5 个答案:

答案 0 :(得分:77)

  1. 您可以通过将控制器放入Views / Shared文件夹来共享控制器之间的视图。然后,每个控制器都可以按名称呈现该视图。
  2. 您可以使用Html.Partial()在当前视图中呈现部分视图(可以在控制器之间共享,如(1)所示)。
  3. 您可以使用Html.Action()在不同的控制器上调用操作,并在当前视图中呈现结果。
  4. 您可以使用AJAX在呈现页面后从其他控制器加载部分视图。

答案 1 :(得分:44)

@Html.Partial("~/Views/ControllerB/Index.cshtml")

答案 2 :(得分:17)

是的,

return PartialView("/path/view.cshtml");

你只需要弄清楚路径部分。

或者你可以将部分视图放在views / shared中,然后返回:

return PartialView("view.cshtml");

答案 3 :(得分:2)

@model YourModelNamesapce.ModelName
@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_LayoutForPartialViews.cshtml";
}
<table>
    <tr>
       <td>
          @Html.LabelFor(model => model.fieldname)
       </td>
       <td>
          @Html.DisplayFor(model => model.fieldname)
       </td>
    </tr>
    <tr>
       <td>@Html.Action("PartialViewAction", "Controller", new { id = Model.id })</td>
    </tr>
</table>

答案 4 :(得分:1)

只是旁注,因为我发现这个帖子正在搜索相同的问题,但答案并不起作用:在Orchard CMS模块中,你不能使用Pittfall发布的neat solution,你必须使用相对路径返回部分视图。假设你有一个控制器

Controllers/SiteController.cs

并且您想要返回部分视图

Shared/MessageList/Items

然后在你的动作方法中你需要写

return PartialView("../Shared/MessageList/Items");