【问题标题】:Render Partial View from other controller从其他控制器渲染局部视图
【发布时间】:2011-12-19 13:46:41
【问题描述】:

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

编辑:我编写了一个仅适用于两个控制器的局部视图,我不想将其复制到它们的两个 Views 文件夹中。
我希望每次呈现视图时都显示局部视图,而不是在发生某些事情之后。

【问题讨论】:

  • 这可能意味着几个不同的事情。您是否只想重用视图(控制器 A 生成的模型)?您是否要调用生成视图的控制器操作?是否要在页面呈现后使用 AJAX 动态加载视图?
  • 你能说得更具体一点吗?你到底想达到什么目标?
  • @Html.Action("YourPartialViewAction", "ControllerName", new { id = Model.id })
  • @StewieFG 我描述了一些我想要实现的目标。

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


【解决方案1】:
@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>

【讨论】:

  • 抱歉,这是如何回答我的问题的?!
  • 这不是一个非常明确的答案,但 Hari 指出 DisplayFor 是一个不错的选择。
  • @Html.Action("PartialViewAction", "Controller", new { id = Model.id }) 正是我想要的。
【解决方案2】:

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

Controllers/SiteController.cs

你想返回部分视图

Shared/MessageList/Items

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

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

【讨论】:

    【解决方案3】:
    @Html.Partial("~/Views/ControllerB/Index.cshtml")
    

    【讨论】:

    • 最简单的解决方案。 :D
    • 是否可以在控制器上调用动作而不是直接查看?
    【解决方案4】:
    1. 您可以通过将视图放入 Views/Shared 文件夹来在控制器之间共享视图。然后,每个控制器都可以按名称呈现该视图。
    2. 您可以使用Html.Partial() 在当前视图中呈现部分视图(可以在控制器之间共享,如 (1) 所示)。
    3. 您可以使用Html.Action() 调用不同控制器上的操作并在当前视图中呈现结果。
    4. 您可以在页面呈现后使用 AJAX 从不同的控制器加载部分视图。

    【讨论】:

    • 关于选项 3:我可以调用我的控制器并从其他控制器渲染部分视图吗?不使用相对路径谢谢!
    • @gdoron 您可以本地化在一个或另一个控制器中生成局部视图的代码,并通过Html.Action() 将其包含在两个控制器中的视图中。
    • 5.您还可以通过提供完整路径为@Html.Partial("~/Views/Partials/Location.cshtml", Model) 将视图呈现为部分视图
    • 但在所有这些情况下,你如何传递模型?
    • @Ayyash - 不,该操作不采用模型,它使用字典中的值来填充它的参数(可能是模型)。您没有将完整的模型传递给它,而是在视图中调用它,就好像您从 Web 调用操作方法一样 - 请参阅 msdn.microsoft.com/en-us/library/…
    【解决方案5】:

    是的,

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

    你只需要计算出路径部分。

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

    return PartialView("view.cshtml");
    

    【讨论】:

    • 我不想共享部分视图。而且相对路径不太适合 mvc 路由系统。其他建议?
    • 这里只是一个小疑问。 PartialView 方法是返回 HTML 编码字符串还是原始 html ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多