2016-04-27 5 views
0

Ich habe ein ASP.Net Server Control erstellt, nennen wir es "WebGrid". Das WebGrid-Steuerelement verfügt über eine eingebettete JavaScript-Ressource, die im ScriptManager der jeweiligen Seite registriert wird, auf der es gehostet wird.Registrieren Sie Javascript Ressource auf einem dynamisch hinzugefügten Server Steuerelement

protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

     ClientScriptManager scriptManager = this.Page.ClientScript; 
     scriptManager.RegisterClientScriptResource(typeof(WebGrid), "Atl.Core.Resources.Scripts.WebGrid.js"); 
    } 

Ich habe auch dafür gesorgt, dass die WebGrid.js Datei, indem die Action Eigenschaft der Datei zu „Embedded Resource“ und hinzugefügt, um die Ressource zu der AssemblyInfo.cs des Projektes als solches eine eingebettete Ressource :

[assembly: WebResource("Atl.Core.Resources.Scripts.WebGrid.js", "text/js")] 

wenn nun die Steuerung im Markup einer aspx Seite wird die Javascript-Ressource mit dem Scriptmanager registriert deklariert und alles funktioniert. ABER, wenn ich das Steuerelement der ControlCollection der Seite dynamisch durch einen Knopf hinzufüge, klicken Sie das Javascript wird NICHT registriert, und die Steuerbeschwerer können solche und solche Javascript-Funktion nicht finden. Beachten Sie sowohl die Taste und die WebGrid in verschiedenen Update gelegen ...

EDIT: wie das Problem Sieht aus, weil ich die ClientScript gegen Script bin mit (siehe Differences between ScriptManager and ClientScript when used to execute JS?). Also, wie registriere ich dann das WebGrid-Skript mit dem ScriptManager der Seite?

Antwort

0

Also habe ich es herausgefunden. Die Antwort ist ziemlich einfach. Rufen Sie im PreRender-Ereignishandler für die Steuerung einfach die statische Methode "RegisterClientScriptResource" für die ScriptManager-Klasse auf. Ich war verwirrt, weil ich dachte, ich müsste auf den physischen ScriptManager auf der Seite verweisen! Nee. Sie müssen das Skript weiterhin als eingebettete Ressource festlegen und das WebResource-Attribut in der Datei Assembly.cs hinzufügen.

protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 

     ScriptManager.RegisterClientScriptResource(this, typeof(ScriptTest), "Atl.Core.Resources.Scripts.ScriptTest.js"); 
    } 
Verwandte Themen