C# Asp.Net按钮在UpdatePanel内的Repeater内单击事件

C# Asp.Net按钮在UpdatePanel内的Repeater内单击事件,c#,asp.net,events,updatepanel,repeater,C#,Asp.net,Events,Updatepanel,Repeater,我试图在Updatepanel中使用一个转发器,并使用按钮删除数据库中的一个条目,获取转发器的新数据并更新面板。我尝试了一个链接按钮,但它总是回发和页面重新编码。然后我尝试了一个常规按钮,并在DataBound事件上为该按钮创建了一个事件。但它不起作用。代码如下: aspx文件: <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:UpdatePanel runat="server" id="Pa

我试图在Updatepanel中使用一个转发器,并使用按钮删除数据库中的一个条目,获取转发器的新数据并更新面板。我尝试了一个链接按钮,但它总是回发和页面重新编码。然后我尝试了一个常规按钮,并在DataBound事件上为该按钮创建了一个事件。但它不起作用。代码如下:

aspx文件:

 <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel runat="server" id="Panel">
        <ContentTemplate> 
            <table cellpadding="0" cellspacing="0" id="saveTable">
                <tr style="font-weight: bold;">
                    <td>Erstellt am</td>
                    <td>Anforderer</td>
                    <td>Werk</td>
                    <td>Gebäude</td>
                    <td>Start Datum</td>

                    <td>Löschen</td>
                    <td>Benutzen</td>
                </tr> 


            <asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
                <ItemTemplate>

                <tr id="Meldung<%# DataBinder.Eval(Container.DataItem,"meldungId")%>">
                    <td><%# DataBinder.Eval(Container.DataItem, "timestamp").ToString().Substring(0, 10)%></td>
                    <td><%# DataBinder.Eval(Container.DataItem,"nameAnforderer") %></td>
                    <td><%# DataBinder.Eval(Container.DataItem,"Werk") %></td>
                    <td><%# DataBinder.Eval(Container.DataItem,"Building") %></td>
                    <td><%# DataBinder.Eval(Container.DataItem,"startDatum").ToString().Substring(0, 10) %></td>
                    <td>
                        <asp:Button runat="server" ID="test"/>
                    </td>
                    <td></td>
                </tr>

               </ItemTemplate>
            </asp:Repeater>
            </table>
        </ContentTemplate>
    </asp:UpdatePanel>

这样做的目的是将文本和ID像这样传递给每个按钮。但是这些按钮没有调用deleteMeldung()的Click事件。

我倾向于在中继器外部有一个单独的删除按钮(通常是样式设置为“display:none”的asp:button以及一个隐藏字段。让我们调用这些B\u delete和HF\u DeleteId

中继器内部的按钮本身不会导致回发,但它们只会将给定行的ID设置为隐藏字段HF#U DeleteId,然后调用$(“#B#U Delete”)。单击()(其中B#U Delete应替换为按钮的当前ClientID)。然后在服务器方法B_Delete_单击,您可以从隐藏字段中检索要删除的行的ID。使用更新面板没有问题。无需处理触发器和处理动态生成按钮中的事件

可能是这样的:

<asp:UpdatePanel runat="server" ID="UP_Rptr" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Repeater runat="server" ID="RPTR_DeleteTest" EnableViewState="False" OnItemDataBound="RPTR_DeleteTest_ItemDataBound">
            <ItemTemplate>
                <div>
                    <span><%# Eval("ID") %></span>
                    <span><%# Eval("Name") %></span>
                    <span><asp:LinkButton runat="server" ID="LB_Delete" Text="delete"></asp:LinkButton></span>
                </div>
            </ItemTemplate>
        </asp:Repeater>

        <asp:HiddenField runat="server" ID="HF_DeleteId" />        
        <asp:Button runat="server" ID="B_Delete" OnClick="B_Delete_Click" Style="display:none;" />
    </ContentTemplate>
</asp:UpdatePanel>

我尝试了Pafkas解决方案,效果很好,谢谢。但是,我被告知,如果有任何其他方法可以解决此问题,我找到了另一个解决方案,我向ScriptManager注册了每个链接按钮,如下所示:

        btn1.Click += new EventHandler((sender1, e1) => deleteMeldung(sender1, e1, meldungId));

        ScriptManager scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null) {
            scriptManager.RegisterAsyncPostBackControl(btn1);
        }
使用此链接按钮:

<asp:LinkButton runat="server" ID="test"/>


它成功了,它在不重新编码的情况下启动了deleteMeldung方法,并传递了参数meldungId以删除Entrie,并将新数据更新到UpdatePanel,您可以使用:因此不会重新加载页面。使用此方法,您可以使用linkbutton。这项工作做得很好。这种方法是可行的,但是在我看来,它有一个缺点。为了触发动态按钮,你必须重建所有控件(即中继器)与回发之前一样。这意味着让中继器使用viewstate,或者在每次回发时从数据库加载数据。然后在处理事件后,通常必须再次绑定重新绘制以反映更改。这没什么大不了的——但如果有办法避免,可能更好。
        btn1.Click += new EventHandler((sender1, e1) => deleteMeldung(sender1, e1, meldungId));

        ScriptManager scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null) {
            scriptManager.RegisterAsyncPostBackControl(btn1);
        }
<asp:LinkButton runat="server" ID="test"/>