У меня есть Masterpage (site.master), которая вызывает View с помощью RenderAction. В настоящий момент View возвращает «привет, мир».
site.master:
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<html>
<head id="Head1" runat="server">
<title><asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" /></title>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server" />
</head>
<body>
<% Html.RenderAction("Test", "Charts"); %>
<asp:ContentPlaceHolder ID="ContentPlaceHolder3" runat="server" >
<p>site.master</p>
</asp:ContentPlaceHolder>
<asp:ContentPlaceHolder ID="ContentPlaceHolder4" runat="server" />
</body>
</html>
Test.aspx:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
hello world!
ChartsController.cs:
public ActionResult Test()
{
return View();
}
Если я обновляю View, чтобы явно передать имя Masterpage, я получаю сообщение об ошибке при вызове RenderAction.
ChartsController.cs:
public ActionResult Test()
{
return View(null, "site");
}
Ошибка:
Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, которая ссылается на главную страницу.
Stack Trace:
[HttpException (0x80004005): Content controls have to be top-level controls in a content page or a nested master page that references a master page.]
System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection) +8857854
System.Web.UI.Page.get_Master() +54
System.Web.UI.Page.ApplyMasterPage() +15
System.Web.UI.Page.PerformPreInit() +45
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +328
Как мне установить главную страницу, которую я хочу использовать в представлении? В конечном итоге я буду динамически настраивать главную страницу с помощью настраиваемого ViewEngine (путем переопределения VirtualPathProviderViewEngine.FindView).
if ( String.IsNullOrEmpty(masterName) ){ masterName = "site"; }
Когда я устанавливаю свойство masterName в моем ViewEngine, а затем вызываю RenderAction из site.master, я получаю ту же ошибку, что и при установке свойства masterName в Action.
Я использую:
Visual Studio 2010
MVC 3
IIS Express
отредактировано: добавлена полная разметка site.master