javascriptでは、スクリプトによってUpdatePanelのリフレッシュをトリガします.

2279 ワード

最近はこのような機能を使う必要があります.インターネットで探してみました.方法は少なくないです.一番簡単な記録を選んできました.
まず、UpdatePanelでOnLoadの方法を宣言します.以下の通りです.
<asp:UpdatePanel ID="UpdatePanel1" runat="server"  OnLoad="UpdatePanel1_Load">

    <ContentTemplate>

	...	        

    </ContentTemplate>

</asp:UpdatePanel>
 
次に、UpdatePanelをトリガする必要がある場合は、次の方法で行います.
同前doPostBack('<%=UpdatePanel 1.lientID%>'')
 
私はajaxで呼び出しました.ページドキュメントの操作が完了したら、彼を呼び出します.
$.ajax({

            type:"GET",

            url:"UserRelationAjaxCall.aspx",

            dataType:"text",

            data:"Type=UserGroup&RelationID="+relationId + "&UserGroupStr="+passStr.trim(),

            success:function(msg){

                    groupsArray =  msg.decodeURIComponent().split('|');

                    generateGroups();

                    $('#no_group').hide()

                    //Aysn refresh list panel

                    __doPostBack('<%= UpdatePanel1.ClientID %>', '');

                },

                error:function(msg){

                    alert("Error");

                }

        });
これで一部が更新されます.
追加点の知識:開発者がよく出会う3つのajax問題:1.ページは局部的なpostbackの時にやはり更新をトリガしました.更新していない時にはudatepanelが更新をトリガしました.3.Loadイベントが完了した後、コントロールのイベントがトリガされます.
1.ページは部分的なpostbackの時にやはり更新をトリガしました.多くの開発者が知らないのは、ページのライフサイクルのすべてのイベントがトリガされ、ページの局部返送中に、ページのコントロールツリーが再構築され、コントロールごとにライフサイクルのイベントが実行され、ローカル返送中に、Page.IsPostBack is true.しかし、Script Manager.IsInAsyncPostback is trueは局所的な返送のみです.
2.UpdatePanelは毎回更新されます.なるべくUpdatePanelを使うライフサイクルイベントは、Init、Load、PreRender、Uloadのように、明確な区別とより安全な使用ができます.doPostBackは毎回呼び出したくないなら、呼び出し前に判断します.
protected void UpdatePanel1_PreRender(object sender, EventArgs e)

{

  // This code will only be executed if the partial postback

  //  was raised by a __doPostBack('UpdatePanel1', '')

  if (Request["__EVENTTARGET"] == UpdatePanel1.ClientID)

  {

    // Insert magic here.

  }

}
まとめて、いくつかの注意点:
Page_ロードは毎回実行されます.この点において、部分更新と全ページ更新は区別がありません.ドポスティックEVENTTARGETを一緒に使うと、リフレッシュが先に特定の目標(通常はサブパネル)に定められます.