384 Stimmen

Einfügen von Inhalten in bestimmte Abschnitte aus einer Teilansicht ASP.NET MVC 3 mit Razor View Engine

Ich habe diesen Abschnitt in meinem _Layout.cshtml

@RenderSection("Scripts", false)

Ich kann sie leicht aus der Vogelperspektive verwenden:

@section Scripts { 
    @*Stuff comes here*@
}

Was ich kämpfe mit ist, wie man einige Inhalte innerhalb dieses Abschnitts von einer partiellen Ansicht injiziert zu bekommen.

Nehmen wir an, dass dies meine Ansichtsseite ist:

@section Scripts { 

    <script>
        //code comes here
    </script>
}

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>

Ich muss einige Inhalte in die Scripts Abschnitt von _myPartial Teilansicht.

Wie kann ich das tun?

0voto

user3717478 Punkte 843

Meine Lösung war, das Skript von der Layoutseite zu laden. Dann prüfte ich im Javacript, ob eines der Elemente in der Parial-Ansicht vorhanden war. Wenn das Element vorhanden war, wusste das Javascript, dass der Teilbereich eingeschlossen worden war.

$(document).ready(function () {
    var joinButton = $("#join");
    if (joinButton.length != 0) {
        // the partial is present
        // execute the relevant code
    }
});

0voto

RogerEdward Punkte 91

Wahlweise können Sie Ihren Ordner/index.cshtml als Masterseite verwenden und dann Skripte für Abschnitte hinzufügen. Dann haben Sie in Ihrem Layout:

@RenderSection("scripts", required: false) 

und Ihre index.cshtml:

@section scripts{
     @Scripts.Render("~/Scripts/file.js")
}

und es wird über alle Ihre Teilansichten arbeiten. Bei mir funktioniert es

0voto

John M Punkte 2270

Ich hatte ein ähnliches Problem, bei dem ich eine Masterseite wie folgt hatte:

@section Scripts {
<script>
    $(document).ready(function () {
        ...
    });
</script>
}

...

@Html.Partial("_Charts", Model)

aber die Teilansicht hing von einem JavaScript im Abschnitt Scripts ab. Ich löste das Problem, indem ich die Teilansicht als JSON kodierte, sie in eine JavaScript-Variable lud und dann mit dieser ein div auffüllte, also:

@{
    var partial = Html.Raw(Json.Encode(new { html = Html.Partial("_Charts", Model).ToString() }));
}

@section Scripts {
<script>
    $(document).ready(function () {
        ...
        var partial = @partial;
        $('#partial').html(partial.html);
    });
</script>
}

<div id="partial"></div>

0voto

Rick Love Punkte 11623

Ich habe dies auf einem ganz anderen Weg gelöst (weil ich in Eile war und keinen neuen HtmlHelper implementieren wollte):

Ich habe meine partielle Ansicht in eine große if-else-Anweisung verpackt:

@if ((bool)ViewData["ShouldRenderScripts"] == true){
// Scripts
}else{
// Html
}

Dann rief ich das Partial zweimal mit einer benutzerdefinierten ViewData:

@Html.Partial("MyPartialView", Model, 
    new ViewDataDictionary { { "ShouldRenderScripts", false } })

@section scripts{
    @Html.Partial("MyPartialView", Model, 
        new ViewDataDictionary { { "ShouldRenderScripts", true } })
}

-1voto

CShark Punkte 2075

Nun, ich schätze, die anderen Poster haben Ihnen eine Möglichkeit gegeben, einen @Abschnitt direkt in Ihren Teilbereich einzubinden (indem Sie html-Helfer von Drittanbietern verwenden).

Aber ich denke, wenn Ihr Skript eng an Ihren Teilbereich gekoppelt ist, ist das kein Problem, Setzen Sie Ihr Javascript einfach direkt in eine Inline <script> Tag innerhalb Ihrer partiellen und fertig mit ihm (nur vorsichtig sein, der Skript-Duplikation, wenn Sie auf die Verwendung der partiellen mehr als einmal in einer einzigen Ansicht);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X