2013-05-30 67 views
0

我有會動態上按鈕更新點擊一個aspx頁面。一個帶有按鈕的表格正被添加到佔位符中。每個按鈕應該重定向到另一個頁面,在查詢字符串中發送它的id。按鈕事件的功能將不觸發(回傳問題)

我遇到的問題是,當每個按鈕被點擊時發生回發並且按鈕不會再被添加到頁面中(因爲該方法正在通過按鈕點擊運行),所以由該事件觸發的功能沒有運行

我試圖把一切都放在一個UpdatePanel內除佔位符,但隨後的表沒有在第一時間加入。我怎樣才能從頁面加載再次調用btn_click函數?我應該通過什麼參數? 或者我可以添加不會延遲迴發的按鈕?

這是ASPX:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
    <h1 style="text-align:center;">חיפוש חברים</h1> 
    <br /> 
     <table> 
      <tr><td>אזור עבודה מועדף</td> 
       <td>סיווג משני</td> 
       <td>סיווג ראשי</td> 
       <td>שם משפחה</td> 
       <td>שם</td> 
       <td>תז</td> 
      </tr> 

      <tr> 

      <td> 
       <asp:DropDownList ID="working_area" CssClass="wid" runat="server"> 
        <%--some items--%> 

       </asp:DropDownList> 
      </td> 

      <td> 

       <asp:DropDownList ID="d_d_second" CssClass="wid" runat="server"> 

       </asp:DropDownList>    
      </td>    

      <td> 
       <asp:DropDownList ID="d_d_main" CssClass="wid" runat="server"> 

        <asp:ListItem></asp:ListItem> 


       </asp:DropDownList> 
      </td> 

      <td><asp:TextBox ID="m_l_name" CssClass="wid" runat="server"></asp:TextBox></td> 
      <td><asp:TextBox ID="m_name" CssClass="wid" runat="server"></asp:TextBox></td> 
      <td><asp:TextBox ID="m_id" CssClass="wid" runat="server"></asp:TextBox></td>   
      </tr> 

      <tr>    
       <td style="text-align:left"><asp:Button ID="search" CssClass="btn btn-primary" 
         runat="server" Text="חפש" onclick="search_Click" /></td> 
      </tr> 


     </table> 

    <asp:PlaceHolder ID="search_tbl_ph" runat="server"></asp:PlaceHolder> 
    </ContentTemplate> 
    </asp:UpdatePanel> 

這是後面的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 


} 



protected void search_Click(object sender, EventArgs e) 
{ 
    search_category s1 = new search_category(); 

    s1.id = m_id.Text; 
    s1.name = m_name.Text; 
    s1.l_name = m_l_name.Text; 
    s1.main_cat = d_d_main.SelectedValue; 
    s1.second_cat = d_d_second.SelectedValue; 
    s1.working_area = working_area.SelectedValue; 


    List<member> m_list = db.return_search_member(s1); 

    Table m_tbl = new Table(); 
    TableRow r2 = new TableRow(); 

    TableCell c7 = new TableCell(); 
    TableCell c8 = new TableCell(); 
    TableCell c9 = new TableCell(); 
    TableCell c10 = new TableCell(); 
    TableCell c11 = new TableCell(); 
    TableCell c12 = new TableCell(); 

    c7.Text = "תז"; 
    c8.Text="שם פרטי"; 
    c9.Text="שם משפחה"; 
    c10.Text="סיווג ראשי"; 
    c11.Text="סיווג משני"; 

    r2.Controls.Add(c12); 
    r2.Controls.Add(c11); 
    r2.Controls.Add(c10); 
    r2.Controls.Add(c9); 
    r2.Controls.Add(c8); 
    r2.Controls.Add(c7); 
    r2.CssClass = " head_line"; 


    m_tbl.Controls.Add(r2); 


    foreach (member m1 in m_list) 
    { 

     TableRow r1 = new TableRow(); 
     TableCell c1 = new TableCell(); 
     TableCell c2 = new TableCell(); 
     TableCell c3 = new TableCell(); 
     TableCell c4 = new TableCell(); 
     TableCell c5 = new TableCell(); 
     TableCell c6 = new TableCell(); 

     Button btn1 = new Button { Text = "עבור לכרטיס חבר", CommandArgument = "argument", ID = m1.id }; 
     btn1.Click += new EventHandler(btn_click); 
     btn1.CssClass = "btn btn-primary"; 
     c1.Controls.Add(btn1); 

     c2.Text = m1.prof.secondary; 
     c3.Text = m1.prof.primary; 
     c4.Text = m1.l_name; 
     c5.Text = m1.f_name; 
     c6.Text = m1.id; 

     r1.Controls.Add(c1); 
     r1.Controls.Add(c2); 
     r1.Controls.Add(c3); 
     r1.Controls.Add(c4); 
     r1.Controls.Add(c5); 
     r1.Controls.Add(c6); 

     m_tbl.Controls.Add(r1); 

    } 
search_tbl_ph.Controls.Add(m_tbl); 
} 

protected void btn_click(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    String member_id = btn.ID; 
    string qstring = "?id=" + member_id; 

    Response.Redirect("member_page.aspx" + qstring); 
    //Session["id"] = qstring; 

} 
+0

是否有任何具體原因動態添加控件而不是在頁面上聲明它們? – Andrei

+0

,因爲我建立一個數據表來自sqlserver – Dvirski

回答

1
 private void MakeButton() 
     { 
     search_category s1 = new search_category(); 

      s1.id = m_id.Text; 
      s1.name = m_name.Text; 
      s1.l_name = m_l_name.Text; 
      s1.main_cat = d_d_main.SelectedValue; 
      s1.second_cat = d_d_second.SelectedValue; 
      s1.working_area = working_area.SelectedValue; 


      List<member> m_list = db.return_search_member(s1); 

      Table m_tbl = new Table(); 
      TableRow r2 = new TableRow(); 

      TableCell c7 = new TableCell(); 
      TableCell c8 = new TableCell(); 
      TableCell c9 = new TableCell(); 
      TableCell c10 = new TableCell(); 
      TableCell c11 = new TableCell(); 
      TableCell c12 = new TableCell(); 

      c7.Text = "תז"; 
      c8.Text="שם פרטי"; 
      c9.Text="שם משפחה"; 
      c10.Text="סיווג ראשי"; 
      c11.Text="סיווג משני"; 

      r2.Controls.Add(c12); 
      r2.Controls.Add(c11); 
      r2.Controls.Add(c10); 
      r2.Controls.Add(c9); 
      r2.Controls.Add(c8); 
      r2.Controls.Add(c7); 
      r2.CssClass = " head_line"; 


      m_tbl.Controls.Add(r2); 


      foreach (member m1 in m_list) 
      { 

       TableRow r1 = new TableRow(); 
       TableCell c1 = new TableCell(); 
       TableCell c2 = new TableCell(); 
       TableCell c3 = new TableCell(); 
       TableCell c4 = new TableCell(); 
       TableCell c5 = new TableCell(); 
       TableCell c6 = new TableCell(); 

       Button btn1 = new Button { Text = "עבור לכרטיס חבר", CommandArgument = "argument", ID = m1.id }; 
       btn1.Click += new EventHandler(btn_click); 
       btn1.CssClass = "btn btn-primary"; 
       c1.Controls.Add(btn1); 

       c2.Text = m1.prof.secondary; 
       c3.Text = m1.prof.primary; 
       c4.Text = m1.l_name; 
       c5.Text = m1.f_name; 
       c6.Text = m1.id; 

       r1.Controls.Add(c1); 
       r1.Controls.Add(c2); 
       r1.Controls.Add(c3); 
       r1.Controls.Add(c4); 
       r1.Controls.Add(c5); 
       r1.Controls.Add(c6); 

       m_tbl.Controls.Add(r1); 

      } 
     search_tbl_ph.Controls.Add(m_tbl); 
     } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if(ViewState["ClickEventFired"]!=null && ViewState["ClickEventFired"]==true) 
     { 
      MakeButton(); 
     } 
    } 

    protected void search_Click(object sender, EventArgs e) 
    { 
     MakeButton(); 
     ViewState["ClickEventFired"]=true; 
    } 

    protected void btn_click(object sender, EventArgs e) 
    { 
     // your code 
    } 

您必須在回發後重新分配點擊事件。 讓我知道,如果你幫助這個。

+0

確保按鈕ID在回發後應該相同。 –

+0

謝謝。很棒! : - ) – Dvirski

0

其建議Page_Init過程中加載動態控件,而不是,因爲我們可能要在早期階段掛鉤我們適當處理事件。

protected void Page_Init(object sender, EventArgs e) 
{ 
    ///code to create dynamic controls 

} 
+0

僅當用戶單擊按鈕時才添加動態控件。所以我不能添加mon pageinit – Dvirski

0

按鈕OnClick事件如果按鈕位於Form元素中,則僅觸發事件。

只要把你的HTML表單內。

我與您的代碼試了一下,能看到search_Click被調用按鈕,當用戶點擊。