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

本文关键字:视图 染局 其他 控制器 | 更新日期: 2023-09-27 18:13:04

是否有一种方法可以在控制器 a 的视图中呈现来自其他控制器B的部分视图?

编辑:我写了一个局部视图,只适用于两个控制器,我不想把它复制到他们的两个视图文件夹。
我希望局部视图在每次视图渲染时显示,而不是在发生某些事情之后。

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

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

是,

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

你只需要算出路径部分。

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

return PartialView("view.cshtml");
@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>

只是一个旁注,因为我发现这个线程搜索相同的问题,但答案不工作:在果园CMS模块中,你不能使用由Pittfall发布的整洁解决方案,你必须使用相对路径来返回部分视图。假设你有一个控制器

Controllers/SiteController.cs

而你想返回部分视图

Shared/MessageList/Items

那么在你的动作方法中你需要写

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