好的;答案似乎是制作一个使用标准 Html.Action 扩展方法调用所需区域的局部视图:
@Html.Action("Index", "Home", new { Area = "HelloWorld" })
需要一个虚拟控制器:
public class WebFormController : Controller { }
然后我们可以使用我们的 dummy 获取 ControllerContext,然后我们可以从那里获取 Partial View 并渲染它:
public class WebFormMvcUtil
{
public static string RenderPartial(string partialName, object model)
{
var httpContextWrapper = new HttpContextWrapper(HttpContext.Current);
var routeData = new RouteData();
routeData.Values.Add("controller", "WebFormController");
var controllerContext = new ControllerContext(new RequestContext(httpContextWrapper, routeData),
new WebFormController());
IView view = ViewEngines.Engines.FindPartialView(controllerContext, partialName).View;
ViewContext viewContext;
var stringBuilder = new StringBuilder();
using (var stringWriter = new StringWriter(stringBuilder))
{
viewContext = new ViewContext(controllerContext, view, new ViewDataDictionary {Model = model}, new TempDataDictionary(), stringWriter);
view.Render(viewContext, viewContext.Writer);
}
return stringBuilder.ToString();
}
}
这归结为能够放置一个简单的
<%= WebFormMvcUtil.RenderPartial("_Area", null) %>
在 WebForms 页面中,将呈现所需的区域。