从其他控制器渲染局部视图
本文关键字:视图 染局 其他 控制器 | 更新日期: 2023-09-27 18:13:04
是否有一种方法可以在控制器 a 的视图中呈现来自其他控制器B的部分视图?
编辑:我写了一个局部视图,只适用于两个控制器,我不想把它复制到他们的两个视图文件夹。
我希望局部视图在每次视图渲染时显示,而不是在发生某些事情之后。
- 你可以通过将控制器放入views/Shared文件夹来在控制器之间共享视图。然后,每个控制器可以通过名称呈现该视图。
- 你可以使用
Html.Partial()
在当前视图中呈现部分视图(可以在控制器之间共享,如(1))。 - 您可以使用
Html.Action()
调用不同控制器上的操作,并在当前视图中呈现结果。 - 你可以使用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");