2010-03-12 5 views
5

Ich habe eine Teilansicht (UserControl), die einen einfachen Pager in meinem Asp.Net MVC-Projekt implementiert. Dieser Pager benötigt Zugriff auf eine JS-Datei, die genau einmal eingegeben werden muss, unabhängig davon, wie viele Instanzen des Pager-Steuerelements auf der übergeordneten Seite vorhanden sind.Wie kann ich eine externe JavaScript-Datei genau einmal pro Teilansicht hinzufügen?

Ich habe versucht, Page.ClientScript.RegisterClientScriptInclude zu verwenden, aber es hatte keine Wirkung (ich nehme an, weil das Code-Nugget zu spät ausgewertet wurde, um die Kopfsteuerung zu beeinflussen). Gibt es eine einfache Alternative?

Antwort

2

eine Flagge in HttpContext.Current.Items gesetzt, wenn Sie das Skript in Ihrem Teil senden - es ist ein Wörterbuch, das für die ganze Anfrage verweilt. Zum Beispiel:

if (!HttpContext.Current.Items.Contains("SentTheScript")) 
{ 
    HttpContext.Current.Items["SentTheScript"] = true; 
    Response.Write(Html.ScriptTag("Script")); 
} 

So wird es höchstens einmal gerendert.

+0

Dies sollte funktionieren, aber es lässt nicht viel Kontrolle darüber, wo die Skript-Tags landen. Es ist nicht möglich, sie im Kopf zu gruppieren oder zum Beispiel an der Unterseite des Körpers zu gruppieren. – AaronSieb

+0

Dies beantwortet die Frage wie geschrieben, so dass es akzeptiert wird. – AaronSieb

1

Page.ClientScript.RegisterClientScriptInclude wird mit dem traditionellen ASP.net verwendet.

Da Sie asp.net-mvc verwenden, müssen Sie nur die script Direktive der Datei js der Seite hinzufügen, die dieses Benutzersteuerelement verwendet.

Da es eine gute Praxis ist nur eine verkleinerte CSS-Datei zu haben, um die ganze Website, wahrscheinlich werden Sie wollen diese Datei im Haupt css minimierte Datei aufzunehmen.

+1

Danke, aber dieses Steuerelement soll auf mehreren Seiten verwendet werden und wird wahrscheinlich mehr als ein Include enthalten, sobald es fertig ist. Ich möchte mich lieber nicht erinnern, welche Includes ich für jede Kontrolle brauche, die ich erschaffe, wenn es überhaupt möglich ist. Obwohl, ich denke, ich könnte sie zu einer Masterseite hinzufügen, wenn es keine andere Alternative gibt ... – AaronSieb

+0

Da Sie teilweise in der Site verwenden, können Sie es für die gesamte Site verwenden und auf dem Clientcomputer zwischenspeichern. –

2

Fügen Sie es der Masterseite hinzu.

Dann können Sie garantieren, dass es nur einmal enthalten ist, und Sie werden es nicht vergessen.Mit modernem Caching gibt es wirklich keine Leistungseinbuße bei der Aufnahme auf jeder Seite.

+1

Nicht sicher, dass ich diesen Ansatz mag, denn dann ist es immer da, auch wenn die Steuerung nicht geladen ist. Wohlgemerkt, ich habe eigentlich keine bessere Lösung. – griegs

+0

Ich hätte nicht gedacht, dass das wirklich so ein Problem ist, aber ich bin ziemlich glücklich, dass es korrigiert wird. –

+0

Es klingt, als ob dies die Route für alle gemeinsamen Abhängigkeiten ist. Ich bin mir aber immer noch nicht sicher, ob ich alle steuerungsspezifischen JS im Master haben möchte. – AaronSieb

Verwandte Themen