Ok; кажется, что ответом будет создание частичного представления, которое вызывает необходимую область с использованием стандартного метода расширения Html.Action:
@Html.Action("Index", "Home", new { Area = "HelloWorld" })
Требуется фиктивный контроллер:
public class WebFormController : Controller { }
Затем мы можем получить ControllerContext, используя наш фиктивный элемент, и оттуда мы можем получить частичное представление и отобразить его:
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) %>
на странице веб-форм и требуемая область будет отображаться.