Ich erhalte den folgenden Fehler in ASP.NET MVC. "Die folgenden Abschnitte wurden definiert, wurden aber nicht für die Layoutseite gerendert" - Jetzt weiß ich, worum es bei dem Fehler geht, aber ich kann es nicht verstehen. Es sollte funktionieren, aber ich weiß nicht warum Gewohnheit.ASP.NET MVC Rendering-Abschnitte für dynamisch angetriebene Inhalte (Widgets)
Ich habe eine index.cshtml-Seite, die alle dynamisch gesteuerten DB-Inhalt rendert. Seiten können Widgets enthalten (wiederverwendbare Blöcke für Inhalte). Der index.cshtml-Code ist unten:
@{
Layout = AppSettings.LayoutFileDirectory + "/" + PageDAL.GetLayoutFileForPage(Model.Page);
string currentSection = string.Empty;
}
@if(!string.IsNullOrEmpty(Model.Page.PageTitle))
{
<h3>@Model.Page.PageTitle</h3>
}
@Html.Raw(Model.Page.PageText)
@foreach (var item in Model.Page.WidgetsInPages)
{
//if(IsSectionDefined(item.WidgetSection))
//{
string sectionName = item.WidgetSection;
//don't want to redefine section
if (currentSection!= sectionName)
{
DefineSection(sectionName,() =>
{
//render all this sections widgets
foreach (var insider in Model.Page.WidgetsInPages.Where(w => w.WidgetSection == sectionName).OrderBy(w => w.WidgetSortOrder))
{
if (insider.Widget.WidgetFile != null)
{
Write(Html.Partial(AppSettings.WidgetTemplatesDirectory + "/" + insider.Widget.WidgetFile, item.Widget));
//Write(Html.Partial(AppSettings.WidgetTemplatesDirectory + "/" + insider.Widget.WidgetFile, new {Widget=item.Widget}));
}
}
});
currentSection = sectionName;
}
//}
}
Jetzt habe ich ein _DefaultTheme.cshtml mit den folgenden Abschnitten. (Dies ist die primäre Layout-Seite)
<div class="header">
@RenderSection("_HeaderSection", false)
</div>
<div class="container">
@RenderSection("_AboveBodySection", false)
@RenderBody()
@RenderSection("_BelowBodySection", false)
</div>
@RenderSection("_AfterBodySection", false)
<footer class="footer">
<div class="container">
@RenderSection("_FooterSection",false)
@Html.Raw(FrontEnd.PopulateFooter(Model.Website))
</div>
</footer>
Hinzufügen von Widgets zu der jeder Seite, die das _DefaultTheme Layout hat perfekt funktioniert gut, aber wenn ich Seiten beginnen zu erben wird es ein Problem. Ich habe jetzt eine andere Seite _DefaultThemeArticles.cshtml die Masterseite ist _DefaultTheme.cshtml
Die _DefaultThemeArticles.cshtml diese enthält:
@{
Layout = "~/Themes/_DefaultTheme.cshtml";
}
<div class="container">
@RenderBody()
</div>
nun der Fehler tritt auf, wenn Widgets auf jeder Seite hinzugefügt, die dieses Layout hat. Ich bekomme diesen Fehler:
Die folgenden Abschnitte wurden definiert, wurden aber nicht für die Layoutseite "~/Themes/_DefaultThemeArticles.cshtml" gerendert: "_BelowBodySection".
Aber der Abschnitt _BelowBodySection wurde in der Masterseite definiert, warum würde es hier nicht funktionieren ?.
Es ist nicht so automatisch, wie Sie vielleicht denken. Sie müssen den Abschnitt in der untergeordneten Vorlage definieren, wenn Sie ihn dort verwenden und auf den entsprechenden Abschnitt der übergeordneten Vorlage verweisen möchten. Siehe http://stackoverflow.com/questions/8578843/rendersection-in-nested-razor-templates. – Jasen