如果我有一个 HomeController 显示其索引 View ,我将如何继续让索引 View 从另一个 Controller 嵌入 UserControl?
以下是主页/索引 View 的内容:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
<%=Resources.Global.HomeTitle %>
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p><%=Resources.Global.HomeIndex %></p>
<h3>Partial title</h3>
<% Html.RenderPartial("~/Views/OtherController/SomeAction.ascx"); %>
</asp:Content>
这是其他 Controller 内容:
public class OtherController : BaseController
{
private readonly IRepositoryContract<SomeType> repo = new SomeTypeRepository();
public ActionResult SomeAction()
{
IQueryable<SomeType> items = repo.GetAllItems();
return View("SomeAction", items);
}
}
这给了我一个 NullReferenceException,因为 RenderPartial() 方法永远不会调用 Controller 。更改以下行
<% Html.RenderPartial("~/Views/OtherController/SomeAction.ascx"); %>
按此
<% Html.RenderPartial("~/Views/OtherController/SomeAction.ascx",((ViewResult) new OtherController().SomeAction()).ViewData.Model); %>
可以工作,但它确实很难看。必须有更好的方法来嵌入来自另一个 Controller 的部分吗?
更新::找到解决方案
这是实现 Adrian Grigore 后的代码解决办法:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="Microsoft.Web.Mvc"%>
<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
<%=Resources.Global.HomeTitle %>
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p><%=Resources.Global.HomeIndex %></p>
<h3>Partial title</h3>
<% Html.RenderAction("SomeAction","OtherController"); %>
</asp:Content>
最佳答案
使用 ASP.NET MVC Futures 中的 Html.RenderAction 方法图书馆。
关于asp.net-mvc - 如何从另一个 Controller 渲染部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348916/