use*_*331 17 asp.net ajax updatepanel repeater linkbutton
在我的页面中,我在转发器内部有一个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>
Run Code Online (Sandbox Code Playgroud)
这是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");
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法,但页面仍在刷新.你有什么建议吗?
Eug*_* S. 47
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);
}
Run Code Online (Sandbox Code Playgroud)
Jai*_*der 16
我有类似的问题,但我不想更新整个转发器,只有转发器之外的内容...所以我做的是
1.添加中继器
<asp:Repeater ID="productList" runat="server">
<!-- my repeater -->
<asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
2.使用可更新内容和触发器添加更新面板
<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>
Run Code Online (Sandbox Code Playgroud)
小智 14
将以下属性添加到包含转发器和链接按钮的页面指令也将起作用:
<%@ page ClientIDMode="AutoID" %>
我有一个控件需要异步和完全回发,所以使用ScriptManager.RegisterAsyncPostBackControl对我不起作用.通过将控件(包含转发器和链接按钮)封闭在UpdatePanel内部,链接按钮将导致异步回发.如果没有updatepanel,链接按钮将导致完全后备.
希望这有助于其他人.