it-swarm.com.de

Wie füge ich ein Skript in einer Teilansicht in MVC4 hinzu?

Dies ist der Code, den ich in meiner Teilansicht habe

@model Contoso.MvcApplication.Models.Exercises.AbsoluteArithmetic

@using(Html.BeginForm())
{
<div>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number1</span>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">+</span>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number2</span>
    <span style="width: 110px; float:left; text-align:center; font-size:2.5em;">=</span>
    <span>
            @Html.EditorFor(model => model.Result)
            @Html.ValidationMessageFor(model => model.Result)
    </span>
</div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Bitte beachte unten in meinem Code, dass ich einen @section habe. Ich habe festgestellt, dass er nicht läuft, wenn ich dort einen Haltepunkt setze. Wenn ich diese Zeile in der _Layout.cshtml verschiebe, funktioniert das gut, aber das ist nicht die Idee.

Wie kann ich MVC4 in einer partiellen Rasiereransicht mitteilen, dass ich diese Bibliothek hinzufügen möchte?

36
Darf Zon

Sie können @Scripts.Render("~/Scripts/my-script.js") für .js-Dateien und @Styles.Render("~/Content/my-Stylesheet.css") für css-Dateien verwenden.

Hinweis: Es funktioniert für ein bestimmtes Bundle auch. Weitere Details - ' http://www.asp.net/mvc/overview/performance/bundling-and-minification '

es funktioniert auf allen Unterseiten in Rasierer, einschließlich Teilansichten

11
Nishanth Shaan

Sie können keine Layoutabschnitte aus einem Teil darstellen. Verschieben Sie die Abschnittsdefinition auf die übergeordnete Seite oder das übergeordnete Layout.

8
viperguynaz

Schauen Sie sich meine Antwort an Wie man einen Abschnitt in einer Teilansicht rendert , wodurch Sie Skripte und Stile in jeder Ansicht/Teilansicht definieren können Es kümmert sich auch um doppelte Einschlüsse.

Mein persönlicher Standpunkt ist, dass Abschnitte keine gute Lösung für Stile und Javascript sind include.

5
Erik Philips

Es gibt keine gebräuchliche Lösung für dieses Problem, aber Sie können die folgenden einfachsten Möglichkeiten verwenden:

1) Sie können eine Erweiterungsmethode wie folgt erstellen:

https://stackoverflow.com/a/6671766/5208058

2) Verschieben Sie einfach Ihre Javascript-Codes in eine separate Teilansicht und rendern Sie in Ihrer Hauptansicht 2 Teilansichten. Eine für die Hauptansicht und die andere für Ihre Skripts wie folgt:

{
    // markup and razor code for Main View here

    @Html.Partial("Main_PartialView")
}

@section Scripts
{
    @Html.Partial("JavaScript_PartialView")
}

Ich hoffe es hilft.

4
Varan Sinayee

Sie können das Skript direkt am Ende der Teilansicht-HTML-Datei ohne Skriptabschnitt hinzufügen (da der Skriptabschnitt nicht in Teilansichten dargestellt wird).

<script language="javascript">
   // Your scripts here
   // ....
</script>
4
Pila 77

Dies funktionierte für mich und erlaubte mir, JavaScript und HTML für eine teilweise Ansicht in derselben Datei zusammenzufassen, um die Lesbarkeit zu erleichtern

In der Ansicht, die die Teilansicht " _MyPartialView.cshtml " verwendet.

<div>
    @Html.Partial("_MyPartialView",< model for partial view>,
            new ViewDataDictionary { { "Region", "HTMLSection" } } })
</div>

@section scripts{

    @Html.Partial("_MyPartialView",<model for partial view>, 
                  new ViewDataDictionary { { "Region", "ScriptSection" } })

 }

In der Teilansicht-Datei 

@model SomeType

@{
    var region = ViewData["Region"] as string;
}

@if (region == "HTMLSection")
{


}

@if (region == "ScriptSection")
{
        <script type="text/javascript">
    </script">
}
2
purvin

Diese Stackoverflow-Seite bot eine vollständige Lösung für diese Frage: Verwenden von Abschnitten im Editor/Anzeigen von Vorlagen

TL; DR: Fügen Sie einfach das Forloop.HtmlHelpers-Nuget-Paket https://www.nuget.org/packages/Forloop.HtmlHelpers/ zu Ihrem Projekt hinzu, damit Sie Javascript aus Razor Partial Views und Vorlagen in ASP ausführen können. NET MVC. Ich habe dies persönlich mit meinem MVC 5-Projekt verwendet.

0
James Porter

Wenn Sie bestimmte Skripts nur in einigen Teilansichten verwenden möchten und vermeiden möchten, dass sie in der gesamten Anwendung unnötig verteilt werden, können Sie Folgendes tun:

Definieren Sie ein Paket, das auf eine leere Javascript-Datei in Ihrem BundleConfig.cs zeigt:

 bundles.Add(new ScriptBundle("~/bundles/empty").Include(
                    "~/Scripts/empty.js"
            ));

Fügen Sie im Kopfbereich Ihres _Layout.cshtml diese Variable hinzu:

@{
        ViewBag.AdditionalBundle = String.IsNullOrEmpty(ViewBag.AdditionalBundle) ? "~/bundles/empty" : ViewBag.AdditionalBundle;
    }

Rendern Sie im unteren Bereich Ihres _Layout.cshtml alle zusätzlichen gewünschten Bundles:

@Scripts.Render("~/bundles/lib")
    @Scripts.Render(@ViewBag.AdditionalBundle);
    @RenderSection("scripts", required: false)

Fügen Sie schließlich in der Teilansicht, in der Sie bestimmte Skripts benötigen, der Variablen das entsprechende Bundle hinzu:

ViewBag.AdditionalBundle = "~/bundles/mySpecificBundle";

Teilansichten werden vor dem _Layout.cshtml gerendert, sodass Sie diese Überprüfung oben in der Datei benötigen. Es geht so: Wenn einer Teilansicht ViewBag.AdditionalBundle ein Wert zugewiesen wurde, verwenden Sie ihn. Andernfalls rendern Sie ein leeres Skript.

0
Glauber