funktion - javascript in javascript einbinden




Saubere Alternative, um Abschnitte in einer Teilansicht nicht verwenden zu können? (2)

Ich werde nicht so tun, als ob dies optimal ist, aber wenn Sie nicht Ihre eigenen Viewpage-Erweiterungen erstellen möchten, können Sie vielleicht etwas ähnliches bauen:

public static class DeferredScripts
{
    static IList<string> paths = new List<string>();

    public static IList<string> Scripts { get; set; }

    public static void Add(string path)
    {
        if (Scripts == null)
        {
            Scripts = new List<string>();
        }

        if (!paths.Any(s => s.Equals(path, StringComparison.OrdinalIgnoreCase)))
        {
            var script = new TagBuilder("script");
            script.Attributes.Add("src", path);

            Scripts.Add(script.ToString());
            paths.Add(path);
        }
    }
}

Was könnte man dann so in einer Teilansicht verwenden:

@{
    DeferredScripts.Add("/scripts/testscript1.js");
}

Und verwenden Sie dies in Ihrem Layout (oder in einer Ansichtsseite):

@foreach (var script in DeferredScripts.Scripts)
{
    @Html.Raw(script)
}

Scheint, in dem Testprojekt zu arbeiten, das ich zusammenwarf: https://github.com/tiesont/DeferredScriptsTestApp

Telerik hat etwas Ähnliches für ihre KendoUI ASP.NET MVC-Helfer, obwohl ich davon ausgehe, dass ihre Implementierung robuster ist als das, was ich hier gezeigt habe.

Da wir nicht in der Lage sind, Abschnitte innerhalb einer Teilansicht zu verwenden, was ist der sauberste Ansatz zum Einbeziehen von Skripts, die nur von Teilern benötigt werden?

Ich weiß, dass ich meinen Scripts-Abschnitt in die Seite mit dem Aufruf des Partiellen einschließen kann, aber wenn mein Teil eine Javascript-Komponente enthält, die ich auf meiner Site wiederverwenden möchte, dann ist das Einschließen von benutzerdefinierten Skripts auf jeder Basisseite ein Albtraum.

Wenn man nicht in der Lage ist, JS innerhalb eines Partials zu verwenden, ist es richtig, dass ich partiell für eine wiederverwendbare Ansicht verwenden möchte, die Javascript-Komponenten enthält.


Sie könnten der Layout-Seite ein Teilsignal geben, dass sie ein Skript enthalten soll, indem Sie zum Beispiel einen IOC Scoped oder HttpContext Bag verwenden. was von der Layoutseite gelesen wird.

Das einzige und Hauptproblem ist, dass das Skript nur in dieser Tasche sein wird, sobald dieses Partial ausgeführt wurde und dann höchstwahrscheinlich Ihr HTML-Kopfabschnitt in der Layoutansicht bereits geschlossen ist. So ist es gut für das Hinzufügen von Skripten im unteren Teil der Seite, aber es funktioniert nicht für CSS.

Eine bessere Möglichkeit besteht darin, eigene Ansichtskomponenten zu erstellen (oder zu erweitern) und eine Option zum Festlegen der erforderlichen Ansichten zu erstellen. IOC diese Komponenten an der Spitze und rendern sie wo benötigt.

Bessere Lösung

Eine bessere Lösung wäre, wenn die Hälfte der Seiten dieses Java-Skript benötigt, um es im Hauptpaket zu bündeln. Der Minifier wäre wahrscheinlich in der Lage, mehr Variablen zu minimieren, und der Benutzer müsste 1 weniger Skript (http-Anforderung) für die geladene Seite anfordern, wodurch weniger Verkehr erzeugt wird, eine schnellere Seitenladung erzeugt wird und eine bessere Benutzererfahrung geschaffen wird.





asp.net-core