在我的页面中,我有一个LinkButton里面的中继器,但UpdatePanel找不到LinkButton到AsyncPostBackTrigger.
这是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> 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>
这里是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"); }
解决方法
Repeater控件内部的ItemCreated事件使用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); }