2012-01-03 20 views
13

Trong trang của tôi, tôi có một LinkButton bên trong bộ lặp, nhưng UpdatePanel không thể tìm thấy LinkButton đến AsyncPostBackTrigger.Làm thế nào để thực hiện AsyncPostBackTrigger cho LinkButton trong Repeater

Đây là mycode.aspx

<asp:ScriptManager ID="Test1" runat="server" /> 
<asp:UpdatePanel ID="TestUpdate" runat="server" UpdateMode="Always"> 
<ContentTemplate> 
<table width="100%"> 
<tr valign="top"> 
    <td width="50%"> 
     <asp:Repeater ID="productList" runat="server" onitemcommand="productList_ItemCommand"> 
     <HeaderTemplate> 
     <ul type="disc"> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <li> 
      <asp:Label id="L1" runat="server" Text='<%# Eval("productName") %>'></asp:Label><br /> 
      Price: 
      <asp:Label runat="server" Text='<%# Eval("productPrice") %>' ></asp:Label>&nbsp;Bath<br /> 
      <img alt="" src="Images/product/product<%# Eval("productID") %>.png" style="width: 200px; height: 130px" /><br /> 
      <asp:TextBox ID="num_product" runat="server" Text="0"></asp:TextBox><br /> 
      <asp:LinkButton ID="order_button" runat="server"><img alt="" src="~/Images/button/order.png" /></asp:LinkButton> 
     </li> 
     </ItemTemplate> 
     <FooterTemplate> 
     </ul> 
     </FooterTemplate> 
     </asp:Repeater> 
    <td> 
    <span class="labelText">Order list</span> 
     <asp:BulletedList ID="orderList" runat="server" BulletStyle="Numbered"> 
     </asp:BulletedList> 
    </td> 
</tr> 
</table> 
</ContentTemplate> 
</asp:UpdatePanel> 

Đây là mycode.aspx.cs

protected void productList_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     //button 
     /*LinkButton btn = new LinkButton(); 
     btn.ID = "order_button"; 
     btn.Click += LinkButton1_Click; 
     Test1.RegisterAsyncPostBackControl(btn);*/ 

     LinkButton btn = (LinkButton)e.Item.FindControl("order_button"); 
     btn.Click += LinkButton1_Click; 
     Test1.RegisterAsyncPostBackControl(btn); 

      /*AsyncPostBackTrigger trigger = new AsyncPostBackTrigger(); 
      trigger.ControlID = btn.ClientID; 
      trigger.EventName = "Click"; 
      TestUpdate.Triggers.Add(trigger);*/ 

    } 
    protected void LinkButton1_Click(object sender, EventArgs e) 
    { 
     //string name = ProductName1.Text.ToString(); 
     //int price = System.Convert.ToInt32(ProductPrice1.ToString(), 10); 
     //int number = System.Convert.ToInt32(TextBox1.ToString(),10); 
     //orderList.Items.Clear(); 
     //orderList.Items.Add(new ListItem(name)); 
     //ListItem product1 = new ListItem(); 
     //product1.Text = name; 
     orderList.Items.Add("test"); 
    } 

Tôi đã thử nhiều phương pháp, nhưng trang vẫn làm mới. Bạn có gợi ý nào không?

Trả lời

41

Bên trong mụcĐiều khiển sự kiện của điều khiển lặp lại đăng ký nút bằng ScriptManager.

//Inside ItemCreatedEvent 
ScriptManager scriptMan = ScriptManager.GetCurrent(this); 
LinkButton btn = e.Item.FindControl("order_button") as LinkButton; 
if(btn != null) 
{ 
    btn.Click += LinkButton1_Click; 
    scriptMan.RegisterAsyncPostBackControl(btn); 
} 
+0

Cảm ơn bạn rất nhiều. Đó là công việc!!! – user1128331

+0

Cảm ơn Eugene. Đã dành rất nhiều thời gian cho tôi. Chúc mừng –

+0

Tôi cần phải làm ngược lại điều này - làm cho một nút liên kết trong bộ lặp lại thực hiện một postback đầy đủ thay vì một postback không đồng bộ từ bên trong updatepanel. Điều này làm việc hoàn hảo cho điều đó. Tôi chỉ sử dụng 'scripMan.RegisterPostBackControl (btn)' thay thế. – ahwm

11

Thêm thuộc tính sau vào thị trang chứa repeater và linkbutton cũng sẽ làm việc:

<%@ page ClientIDMode="AutoID" %>

Tôi đã có một điều khiển cần thiết để làm việc cả postback không đồng bộ và đầy đủ, vì vậy sử dụng ScriptManager.RegisterAsyncPostBackControl sẽ không hoạt động đối với tôi. Bằng cách kèm theo điều khiển (có chứa một bộ lặp và nút liên kết) bên trong một UpdatePanel, nút liên kết sẽ gây ra một postback không đồng bộ. Với không có updatepanel, các linkbutton sẽ gây ra một fullpostback.

Hy vọng điều này sẽ giúp người khác.

12

Tôi có vấn đề tương tự, nhưng tôi không muốn cập nhật toàn bộ lặp lại, chỉ có một nội dung bên ngoài lặp lại ... vì vậy những gì tôi đã làm

1. là Thêm repeater

<asp:Repeater ID="productList" runat="server"> 
    <!-- my repeater --> 
<asp:Repeater> 

2. Thêm Update Panel với các nội dung có thể cập nhật, và kích hoạt

<asp:UpdatePanel ID="up" runat="server"> 
    <ContentTemplate> 
     <!-- when the click on repeater's links, this content will be updated --> 
    </ContentTemplate> 
    <Triggers> 
     <!-- trigger will be the repeater's links/btn that generate postback --> 
     <asp:AsyncPostBackTrigger ControlID="productList" /> 
    </Triggers> 
</asp:UpdatePanel> 
+1

Cảm ơn bạn rất nhiều vì đã chia sẻ điều này! Chính xác những gì tôi đã cố gắng để làm :-) – Oliver

+0

Tôi thích cái này – Yorro

Các vấn đề liên quan