2011-01-14 2 views
2

Ich versuche, ScriptManager zu erweitern, um den Umgang mit Ressourcen zu vereinfachen, die mehrere Ressourcendateien haben (z. B. mehr als eine Skriptdatei sowie CSS). Das Ziel ist, dass ich in der Lage sein werde, eine einzige ScriptReference zu Scripts hinzuzufügen und es laden mehr als eine Ressource, die auf diesen Referenznamen bezogen ist.ScriptManager, Page, statische Methoden ... wie bekomme ich den aktuellen ScriptManager ohne Page?

Worauf ich stecken bleibe ist, wie kann Ihr grundlegendes ScriptManager wissen, was mit Sachen zu tun ist, wenn statische Methoden verwendet werden, die keinen Page Parameter enthalten? Zum Beispiel:

ScriptManager.ScriptResourceMapping.AddDefinition("someName", new 
    ScriptResourceDefinition { Path="/script/somescript.js"}); 

Diese Definition ergänzt (glaube ich), was auch immer der aktive Skript-Manager für die Seite ist, die ausgeführt wird, wenn Sie es nennen. Aber im Gegensatz zu den Methoden der alten Schule, wie RegisterClientScriptBlock, gibt es keinen Parameter, der die Seite identifiziert. Aber dieses Zeug muss im ScriptManager Objekt gespeichert werden, nicht? Also, wie weiß es das?

Ich kann immer einen Verweis auf den aktiven mit diesem erhalten:

ScriptManager.GetCurrent(page);

sondern im Idealfall würde ich neue Methoden erstellen, die genau wie Microsoft arbeiten. Ich kann nicht herausfinden, wie ich so etwas wie

ScriptManager.ScriptResourceMapping.AddDefinition(string name, 
    ScriptResourceDefinition definition, 
    ResourceType type) 

implementieren könnte, die die Objektinstanz herausfinden konnte, das Zeug in hinzuzufügen, ohne einen Seitenparameter hinzufügen zu müssen. Irgendwie machen sie es ... wie kann ich?

+0

Warum Sie versuchen, vom Skript-Manager zu gehen und nicht einen einfachen Handler zu erstellen und die Dateien selbst zu lesen, machen Sie den gleichen Job mit Ihrem Code und Sie können die vollständige Kontrolle über sie haben. (Minimiert sie, lösche sie usw.) – Aristos

+0

Ich habe schon so etwas, und so bin ich hier gelandet. Aber ich möchte es wirklich mit ScriptManager integrieren, weil es einige sehr nützliche Funktionen hat (wie zum Beispiel, welche Version für Debug/Release, CDN etc. zu verwenden ist), also sehe ich keinen Grund, das Rad für all diese Funktionalität neu zu erfinden. –

Antwort

8

Sie erhalten die Seitenreferenz durch (Page)(HttpContext.Current.Handler) sogar in einem statischen Kontext.

+0

Ich wusste das nicht. Vielen Dank. Ich habe meinen Skript-Manager durchforstet und herausgefunden, dass MS die Quelle ist, am Ende muss ich eigentlich gar nicht darauf verweisen, aber das beantwortet meine Frage. Ich habe herausgefunden, was MS tut, obwohl die statischen Methoden von ScriptResourceDefinition überhaupt keinen Seitenkontext haben. (ScriptResourceDefinition ist ein statisches Objekt ohne Kontext). –