2009-07-27 4 views
43

私は変更できない.ascxコントロールにいくつかのCSSを設定するpageLoad関数を持っています。ページの読み込みには問題ありませんが、更新パネルでコントロールが更新されると、CSSは適用されなくなります。ページの更新後に関数を再実行するにはどうすればよいですか?更新パネルが更新された後、いくつかのjavascriptを実行するにはどうすればよいですか?

$(function() { 
     $("textarea").attr("cols", "30"); 
     $("input.tbMarker").css({ "width": "100px" }).attr("cols","25"); 
    }); 

これは明らかに初期ページの読み込み時にのみ実行されます。更新後にどのように実行できますか?更新パネルのためのあなたのポストバック中

+0

タイ: http://stackoverflow.com/questions/9026496/running-script-after-update-panel-ajax-asp -net – dotnettex

+0

http://stackoverflow.com/a/339114/900284 –

答えて

38

add_pageLoadedハンドラを追加することもできます。

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler); 

注:ハンドラが任意のコールバックを起動しますが、あなたがあなたの関数が呼び出さたいときにフィルタリングするsender._postBackSettings.panelIDを使用することができます。

よりサンプル:

+0

これは素晴らしいことです!また、明示的なパネルがない場合(例えば、バックグラウンドでUpdatePanelsを使用するいくつかのTelerikコントロールを使用している場合など)、 'sender._postBackSettings.asyncTarget'を使用して、現在のポストバックが探しているものかどうかを確認することもできますために。 –

13

、サーバーコードで、ページにいくつかの新しいスクリプトを追加するClientScriptManagerを使用して、このような何か:

ClientScriptManager.RegisterStartupScript(
     typeof(page1), 
     "CssFix", 
     "javascriptFunctionName()", 
     true); 

第三に一致する名前の関数で、あなたのjavascriptをカプセル化引数があり、ポストバックが返ったときに実行する必要があります。

11
ます。また、クライアント側のコード内のイベント(JavaScriptの)UpdatePanelのはこのように終わったたびにバインドすることができ

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();}); 

この場合、myFunction(); UpdatePanelポストバックが発生するたびに呼び出されます。ページがロードされたときにこのコードを実行すると、関数は正しい時刻に呼び出されます。

12

スクリプトマネージャと同じフォームにコードを追加します。

背後にあるコード:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager1.IsInAsyncPostBack) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<script language='javascript' type='text/javascript'>"); 
     sb.Append("Sys.Application.add_load(func);"); 
     sb.Append("function func() {"); 
     sb.Append("Sys.Application.remove_load(func);"); 
     sb.Append("alert('I am Batman!');"); 
     sb.Append("}"); 
     sb.Append("</script>"); 
     ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false); 
    } 
} 
69

ほとんどの簡単な方法は、あなたのjavascriptのコードでMSAjax pageLoadイベントを使用することです:

<script> 
    ///<summary> 
    /// This will fire on initial page load, 
    /// and all subsequent partial page updates made 
    /// by any update panel on the page 
    ///</summary> 
    function pageLoad(){ alert('page loaded!') } 
</script> 

私はそれが魔法のように動作し、それを何度も使用されてきました。最も重要なことは、document.ready関数(これは、ページがDocument Object Model(DOM)の実行準備が完了した後に一度だけ実行されます)と混同しないでください。ただし、updateLoadイベントは、リフレッシュ。

出典:クライアント側でMSAjax pageLoadイベントにRunning script after Update panel AJAX asp.net

+3

素晴らしい!私は、更新パネルが更新されている間、javascriptを実行したままにしておいて、あなたの答えに感謝しています。 – Shide

+1

プロジェクトでこのような状況が発生しました。これは私にとって最も簡単で信頼性の高いものでした。 'add_pageLoaded'と' RegisterStartupScript'アプローチは、コールバックで追跡してデバッグするのが難しくなりましたが、 'pageLoad'はちょうどWorks(tm) – brichins

+0

var firstload = 0;関数pageLoad(){if(firstload == 0)firstload = 1; else {アラート( 'ポストバック!'); } – mjb

関連する問題