【问题标题】:How to do AsyncPostBackTrigger for the LinkButton in the Repeater如何为中继器中的 LinkBut​​ton 执行 AsyncPostBackTrigger
【发布时间】:2012-01-03 17:41:50
【问题描述】:

在我的页面中,我在中继器中有一个 LinkBut​​ton,但 UpdatePanel 找不到 AsyncPostBackTrigger 的 LinkBut​​ton。

这里是 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>

这里是 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");
    }

我尝试了很多方法,但页面仍然刷新。你有什么建议吗?

【问题讨论】:

  • 尽管您标记为正确的答案确实是正确的,但正确答案来自 Matt F。由于未使用正确的 ID 生成链接按钮,您需要手动注册。如果它具有由 AutoID 生成的正确 ID,则脚本将检测控件并触发 Ajax 请求。此外,更改属性然后必须编写特殊代码更清洁......

标签: asp.net ajax updatepanel repeater linkbutton


【解决方案1】:

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);
}

【讨论】:

  • 谢谢尤金。为我节省了很多时间。干杯
  • 我需要做与此相反的操作 - 使转发器中的链接按钮执行完整回发,而不是从更新面板中进行异步回发。这非常适合。我只是改用scripMan.RegisterPostBackControl(btn)
  • 这是如何工作的?,你在哪里说触发器属于哪个更新面板
  • 用 ScriptManager 注册按钮可以处理这个问题。 docs.microsoft.com/en-us/dotnet/api/…
【解决方案2】:

我有类似的问题,但我不想更新整个转发器,只更新转发器之外的内容......所以我所做的是

1.添加中继器

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

2。添加带有可更新内容的更新面板和触发器

<asp:UpdatePanel ID="up" runat="server">
    <ContentTemplate>
        <!-- when 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>

【讨论】:

  • 非常感谢分享这个!正是我想要做的:-)
  • 谢谢。我从不知道您可以将整个中继器引用为触发器。
【解决方案3】:

将以下属性添加到包含转发器和链接按钮的页面指令也将起作用:

&lt;%@ page ClientIDMode="AutoID" %&gt;

我有一个需要异步工作和完全回发的控件,因此使用 ScriptManager.RegisterAsyncPostBackControl 对我不起作用。通过将控件(包含转发器和链接按钮)封装在 UpdatePanel 中,链接按钮将导致异步回发。如果没有更新面板,链接按钮会导致完全回发。

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多