1

私はこのような構造を持っています。

   UpdatePanel1
     |    |
     | CheckBoxes - in code behind CheckBoxCheckedHandel() method
     | 
     |---Usercontrol1
              |
            UpdatePanel2
                |
               Button1

ここに問題があります。

をクリックすると、更新Button1が発生してメソッドが呼び出されます。したがって、ポストバックの原因となったコントロール名が必要か、クリックしたときにのみ更新したいのです。UpdatePanel1CheckBoxCheckedHandel()UpdatePanel2Button1

もう 1 つ言いたいのは、何かが起こったときに更新されているかどうかを確認するために、両方の更新パネルに時間を表示していることです。この時点で、button1 のクリック イベントはUpdatePanel1時間を更新しませんが、それでも CheckBoxCheckedHandel() メソッドを呼び出します。

過去 2 日間、この問題で立ち往生しています。助けてください。

注: UpdatePanel1 - updatemode - 条件付きでトリガーなし UpdatePanel2 - updatemode - ボタン 1 クリック イベントの条件付きおよび asp:asyncTriggre

4

2 に答える 2

2

非同期ポストバックの原因となったコントロールの ID を取得する方法を次に示します。Page_Load ハンドラーに次のコードを入れます。

    if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
    {
        string id = Utils.GetAsyncPostBackControlID(Page, Page.Request);
    }

次の関数は ID を取得します。

    public static string GetAsyncPostBackControlID(Page page, HttpRequest request)
    {
        string smUniqueId = ScriptManager.GetCurrent(page).UniqueID;
        string smFieldValue = request.Form[smUniqueId];

        if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains('|'))
            return smFieldValue.Split('|')[1];

        return String.Empty;
    }

ポストバックの原因となったコントロールの ID は、ページの ScriptManager の ID という名前の hiddenfield に格納されます。値は次の形式で保存されます。Script_Manager_ID|Control_ID

于 2012-12-19T09:54:11.650 に答える
0

非同期ポストバックの原因となったコントロールを取得するには、解析する代わりに次を使用できます

var asyncPostBackSourceControl = Page.FindControl(scriptManager.AsyncPostBackSourceElementID)
于 2016-08-30T23:23:49.953 に答える