ASP.NET Web Form中ConfirmButtonExtender仅首行生效问题求助
问题原因
核心问题是重复的控件ID和BehaviorID:在Repeater的ItemTemplate中,你给ConfirmButtonExtender指定了固定的ID和BehaviorID,当Repeater循环生成多行时,客户端会出现多个ID相同的DOM元素,这会导致AJAX控件的JavaScript逻辑冲突,只有第一个控件能正常绑定确认事件。
解决方案
修改前端代码,移除固定的ID和BehaviorID,让ASP.NET自动为每行的ConfirmButtonExtender生成唯一标识,并设置有效的确认提示文本:
修改后的前端关键代码片段
<td> <asp:LinkButton CssClass="btn btn-danger" ID="btnSelect" runat="server" CommandName="Select" CommandArgument='<% #Eval("id")%>'> Select</asp:LinkButton> <asp:LinkButton CssClass="btn btn-danger" ID="btnDelete" runat="server" CommandName="Delete" CommandArgument='<% #Eval("id")%>'>Delete</asp:LinkButton> <!-- 移除固定ID和BehaviorID,设置确认文本 --> <ajaxToolkit:ConfirmButtonExtender runat="server" ConfirmText="确定要删除该患者记录吗?" TargetControlID="btnDelete"> </ajaxToolkit:ConfirmButtonExtender> </td>
完整修改后前端代码
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <!-- Start Table --> <table class="table table-dark"> <thead> <tr> <th scope="col">ID</th> <th scope="col">FullName</th> <th scope="col">Phone</th> <th scope="col">BirthDay</th> <th scope="col"></th> </tr> </thead> <tbody> <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand1"> <ItemTemplate> <tr> <td> <asp:Label ID="lblID" runat="server" Text='<%# Eval("id") %>'></asp:Label> </td> <td> <asp:Label ID="lblName" runat="server" Text='<%# Eval("FullName") %>'></asp:Label> </td> <td> <asp:Label ID="lblPhone" runat="server" Text='<%# Eval("phone") %>'></asp:Label> </td> <td> <asp:Label ID="lblDate" runat="server" Text='<%# Eval("birthDay") %>'></asp:Label> </td> <td> <asp:LinkButton CssClass="btn btn-danger" ID="btnSelect" runat="server" CommandName="Select" CommandArgument='<% #Eval("id")%>'> Select</asp:LinkButton> <asp:LinkButton CssClass="btn btn-danger" ID="btnDelete" runat="server" CommandName="Delete" CommandArgument='<% #Eval("id")%>'>Delete</asp:LinkButton> <ajaxToolkit:ConfirmButtonExtender runat="server" ConfirmText="确定要删除该患者记录吗?" TargetControlID="btnDelete"> </ajaxToolkit:ConfirmButtonExtender> </td> </tr> </ItemTemplate> </asp:Repeater> </tbody> </table> <!-- End Table -->
其他说明
- 后端代码无需修改,保持原逻辑即可
- 确保页面上的
ScriptManager已正确注册,且项目已正确引用AJAX Control Toolkit - 所有在Repeater、GridView等数据绑定控件中重复生成的子控件,都不要手动设置固定的
ID或BehaviorID,依赖ASP.NET自动生成唯一标识可避免客户端冲突
内容的提问来源于stack exchange,提问作者YazeedALatawi
相关产品推荐
相关产品推荐

