大家都知道如何使用UpdatePanel,這邊就不贅述

某些情況之下可能需要動態產生非常多的Button及其事件

但這些Button若沒有加入到UpdatePanel的Trigger中,則必定會產生Postback

這對我而言造成了一些困擾

 

一個簡單的範例告訴大家如何動態地加入許多Trigger以避免Postback發生

前端:

<td >
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
     <asp:UpdatePanel  id="UpdatePanel1" UpdateMode="Conditional" ScrollBars="Auto" runat="server" width="100%" height='870'>
     <ContentTemplate>
         <label id="lbRecode" runat="server" style="font-size: large; font-style: normal; font-family: &quot;Microsoft YaHei&quot;"></label>            </ContentTemplate>
     </asp:UpdatePanel>          
</td>

在某個table中的td加入原件ScriptManager 與 UpdatePanel

後端:

protected void constuctUser()
    {
        DataTable dtExamniner = new DataTable();
        dtExamniner = getAllExaminer();
        if (dtExamniner.Rows.Count > 0)
        {
            for (int i = 0; i < dtExamniner.Rows.Count; i++)
            {
                tbExaminerTable.ID = "tbExaminerTable";

                TableRow trUserData = new TableRow();
                TableCell tcUserData = new TableCell();
                //動態產生Button
Button btnExaminer = new Button(); btnExaminer.ID = "btExaminer_" + dtExamniner.Rows[i]["UserID"].ToString(); btnExaminer.Text = dtExamniner.Rows[i]["userName"].ToString(); bExaminer.Click += new EventHandler(btnExaminer_Click); //動態產生Trigger AsyncPostBackTrigger tLoading = new AsyncPostBackTrigger(); tLoading.ControlID = btnExaminer.ID; //要偵測的物件ID tLoading.EventName = "Click"; //Button的觸發事件為Click UpdatePanel1.Triggers.Add(tLoading); UpdatePanel1.Update(); trUserData.Controls.Add(tcUserData); tcUserData.Controls.Add(btnExaminer); tbExaminerTable.Controls.Add(trUserData); ExaminerTablePanel.Controls.Add(tbExaminerTable); } } }

 這段重點在於動態產生一定數量的Button及其事件,還有動態產生Trigger,其餘的皆為將物件加入表格中或是排版

 

 **但此方法可能經常造成Trigger掉了**

解決方法是

 

請在PageLoad中加入,讓他重新連接Trigger

if (this.ScriptManager1.IsInAsyncPostBack)
        {
            UpdatePanel1.GetType().GetMethod("Initialize", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(UpdatePanel1, null);
        }

 

arrow
arrow
    文章標籤
    ASP.net C# Ajax UpdatePanel
    全站熱搜
    創作者介紹
    創作者 Chien-Ching 的頭像
    Chien-Ching

    Chien-Ching的部落格

    Chien-Ching 發表在 痞客邦 留言(0) 人氣()