Frage Geschachtelte Layouts für MVC5


Ich habe ein paar Beiträge zu diesem Thema gesehen:

Razor Nested Layouts mit kaskadierten Abschnitten

MVC 3 - Verschachtelte Layouts - Abschnitte werden nicht in Bereichen gerendert

Und es scheint immer problematisch zu sein. Aber sie sind beide ziemlich alt und fragen sich, ob sich die Dinge geändert haben.

Grundsätzlich habe ich ein Master-Layout und 3 verschiedene Body-Templates basierend auf welcher Art von Seite es ist. Zum Beispiel:

_Layout.cshtml

<html lang="en">
    <head>
    </head>
    <body style="padding: 50px 0;">
        <header class="navbar navbar-default navbar-fixed-top" role="banner">
            @Html.Partial("_MenuPartial")
        </header>
        <ol class="breadcrumbs">
            @RenderSection("breadcrumbs", true);
        </ol>
        <section>
            @RenderBody();
        </section>
            <footer class="navbar navbar-default navbar-fixed-bottom">
            @Html.Partial("_FooterPartial")
        </footer>
        @Html.Partial("_ScriptInitPartial")
    </body>
</html>

_LayoutForEdit.cshtml

<div class="panel panel-primary">
    <div class="panel-body">
        <div class="col-lg-2">
            <ul class="nav nav-pills nav-stacked">
                @RenderSection("tabs", true)
            </ul>
        </div>
        <div class="col-lg-10">
            <div class="tab-content">
                @RenderBody()
            </div>
        </div>
    </div>
    <div class="panel-footer">
        <button class="btn btn-primary" data-bind="enable: Entity.isValid, click: save">Save</button>
    </div>
</div>

Jetzt ist das in Ordnung, wenn es aufgerufen wird. Fast.

Das Rendern von Sektionen muss im Child-Layout sein, wie es scheint. Wenn ich versuche, die Paniermehl in die _Layout.cshtmlEs wird scheitern, weil _LayoutForEdit.cshtml hat es nie gerendert. Wie kann ich das beheben?

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_LayoutForEdit.cshtml": "breadcrumbs".


14
2018-01-09 17:18


Ursprung


Antworten:


Ich weiß, es ist eine alte Frage. Ich dachte, ich würde es trotzdem teilen, für den Fall, dass irgendjemand anderes (wie ich) auf dieses Problem eingeht.

An der Unterseite deines Kind Layout definieren Sie einen Abschnitt mit dem gleichen Namen wie der Abschnitt im übergeordneten Layout. Innerhalb dieses Abschnitts setzen Sie einfach ein @RenderSectionunter Angabe des gleichen Namens wie zuvor. Sobald das vorhanden ist, haben Sie im Wesentlichen das Child-Layout "umgehen" Inhalt von Seiten bis zu seinem übergeordneten Layout:

@section breadcrumbs {
    @RenderSection("breadcrumbs", true)
}

28
2018-05-03 18:24



Ich bin mir nicht sicher, ob du noch Hilfe brauchst, aber ich werde trotzdem antworten.

Die RenderSection-Methode übernimmt die folgenden Parameter gemäß MSDN-Dokumentation:

public HelperResult RenderSection( string name, bool required )

Parameters
name
     Type: System.String
     The section to render.
required
     Type: System.Boolean
     true to specify that the section is required; otherwise, false.

Ändern Sie den Anruf zu:

@RenderSection ("Brotkrumen", falsch);

Wenn der Parameter "required" des Abschnitts "false" lautet, wird kein Fehler ausgegeben, wenn dieser Abschnitt nicht in einer Ansicht enthalten ist.


2
2017-11-24 17:06