gpt4 book ai didi

c# - Asp.Net 按钮单击 UpdatePanel 内的 Repeater 内的事件

转载 作者:行者123 更新时间:2023-11-30 16:57:52 24 4
gpt4 key购买 nike

我正在尝试在 Updatepanel 中使用 Repeater,并使用按钮删除数据库中的一个条目并获取 Repeater 的新数据并更新面板。我试过 LinkBut​​ton,但它总是回发并且页面重新定位。然后我尝试了一个常规按钮并在 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 = 测试事件的按钮

    protected void deleteMeldung(object sender, EventArgs e) {
System.Threading.Thread.Sleep(5000);
}

protected void Repeater1_ItemDataBound(object source, RepeaterItemEventArgs e) {
RepeaterItem repeaterSource = e.Item;
Button btn1 = repeaterSource.FindControl("test") as Button;
DataRowView drv = e.Item.DataItem as DataRowView;
string meldungId = drv.Row["meldungId"].ToString();

btn1.ID = "myNewButton"+meldungId;
btn1.Click += new EventHandler(deleteMeldung);
btn1.Text = "delete";

}

所以有效的方法是像那样将文本和 ID 传递给每个按钮。但是按钮没有调用 deleteMeldung() 的点击事件

最佳答案

我倾向于在中继器外部设置一个单独的删除按钮(这通常是 asp:Button,样式设置为“display:none”以及一个隐藏字段。我们将它们称为 B_Delete 和 HF_DeleteId。

中继器内部的按钮本身不会引起回发,但它们只是将给定行的ID设置为隐藏字段HF_DeleteId,然后调用$('#B_Delete').click()(其中B_Delete应该替换为按钮的当前 ClientID)。然后在服务器方法 B_Delete_Click 中,您可以从隐藏字段中检索要删除的行的 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>

和服务器方法:

protected void RPTR_DeleteTest_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
var lb = e.Item.Controls[1] as LinkButton; // for simplicity only - do not use code like this
lb.OnClientClick = String.Format("$('#{0}').val('{1}');$('#{2}').click();return false;",
HF_DeleteId.ClientID,
DataBinder.Eval(e.Item.DataItem, "ID"),
B_Delete.ClientID);
}

protected void B_Delete_Click(object sender, EventArgs e)
{
int id = Int32.Parse(HF_DeleteId.Value);
// do your sanity checks and deletion logic here
}

关于c# - Asp.Net 按钮单击 UpdatePanel 内的 Repeater 内的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com