2016-04-27 22 views
0

私はASP.Netサーバーコントロールを作成しました。これを "WebGrid"と呼ぶことができます。 WebGridコントロールには、ホストされているページのScriptManagerに登録されている埋め込みJavaScriptリソースがあります。動的に追加されたサーバーコントロールにjavascriptリソースを登録

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

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

私もWebGrid.jsファイルは、「埋め込まれたリソース」へのファイルのビルドアクションプロパティを変更することにより、埋め込まれたリソースであることを確認しました、そのようにプロジェクトのAssemblyInfo.csにリソースを追加しました:コントロールがaspxページのマークアップで宣言されているとき

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

さて、JavaScriptのリソースは、のScriptManagerに登録し、すべてが正常に動作しています。しかし、私はコントロールをページのControlCollectionに動的にボタンをクリックしてクリックしてJavaScriptをクリックして登録されていないコントロールを追加し、そのようなjavascript関数を見つけることができないと文句を言います。

EDITは...ボタンと異なる UpdatePanelsに配置されているWebGridの両方に注意してください。私は(Differences between ScriptManager and ClientScript when used to execute JS?)を参照してくださいにScriptManager対ClientScriptを使用していますので、問題のように見えることです。では、WebGridのスクリプトをPageのScriptManagerに登録するにはどうすればよいですか?

答えて

0

私はそれを理解しました。答えはかなり簡単です。コントロールのPreRenderイベントハンドラでは、ScriptManagerクラスの静的なRegisterClientScriptResourceメソッドを呼び出します。私はページ上の物理的なScriptManagerを参照する必要があると思ったので混乱しました!いいえ。スクリプトを埋め込みリソースとして設定し、WebResource属性をAssembly.csファイルに追加する必要があります。

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

     ScriptManager.RegisterClientScriptResource(this, typeof(ScriptTest), "Atl.Core.Resources.Scripts.ScriptTest.js"); 
    } 
関連する問題