You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Web Form中ConfirmButtonExtender仅首行生效问题求助

解决Repeater中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:16:01