У меня есть мастер-страница (site.master), которая вызывает представление с использованием RenderAction.На данный момент вид возвращает «привет мир».
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();
}
Если я обновлю представлениечтобы передать имя главной страницы явно, я получаю сообщение об ошибке при вызове 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 в действии.
Я использую:
Visual Studio 2010
MVC 3
IIS Express
отредактировано: добавлен полный сайт.мастер разметки