programing

리피터의 링크 버튼에 대한 비동기 포스트백 트리거를 수행하는 방법

closeapi 2023. 8. 29. 20:38
반응형

리피터의 링크 버튼에 대한 비동기 포스트백 트리거를 수행하는 방법

내 페이지에서 리피터 안에 LinkButton이 있지만 UpdatePanel에서 LinkButton to AsyncPostBackTrigger를 찾을 수 없습니다.

여기 제 코드입니다.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");
    }

여러 가지 방법을 시도해 보았지만 페이지는 여전히 새로 고쳐져 있습니다.제안할 것이 있습니까?

Repeater 컨트롤의 Inside 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);
}

저도 비슷한 문제가 있었지만, 리피터 전체를 업데이트하고 싶지 않았습니다. 리피터 외부의 콘텐츠만 업데이트하고 싶었습니다.그래서 제가 한 일은.

리피터 추가

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

업데이트 가능한 콘텐츠와 함께 업데이트 패널 추가 및 트리거

<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>

리피터와 링크 버튼을 포함하는 페이지 지시문에 다음 속성을 추가하는 것도 작동합니다.

<%@ page ClientIDMode="AutoID" %>

비동기식 및 전체 포스트백 모두 작동해야 하는 제어 기능이 있어서 ScriptManager를 사용했습니다.RegisterAsyncPostBackControl이 작동하지 않습니다.UpdatePanel 내부에 컨트롤(리피터와 링크 버튼 포함)을 포함함으로써 링크 버튼은 비동기식 포스트백을 발생시킵니다.업데이트 패널이 없으면 링크 버튼으로 인해 전체 포스트백이 발생합니다.

이것이 다른 사람에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/8716362/how-to-do-asyncpostbacktrigger-for-the-linkbutton-in-the-repeater

반응형