如何使用UpdatePanel实现无页面回发获取Repeater对应行数据
解决方案
实现思路
利用UpdatePanel的异步局部刷新特性,配合Repeater的行命令绑定机制传递行唯一标识,既可以拿到对应行数据,也不会触发整页回发。
步骤1:修改前端页面代码
首先确保页面已引入ScriptManager控件(UpdatePanel运行的必要依赖),然后将Repeater包裹进UpdatePanel内,同时调整LinkButton的事件绑定逻辑,改用命令参数传递当前行的唯一标识:
<!-- 必须先添加ScriptManager,放在页面顶部Form标签内即可 --> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Repeater ID="rptCariler" runat="server" OnItemCommand="rptCariler_ItemCommand"> <ItemTemplate> <tr> <td><%#Eval("CariKodu") %></td> <td><%#Eval("CariUnvani") %></td> <td><%#Eval("CariGrubu") %></td> <td><%#Eval("AdSoyad") %></td> <td><%#Eval("Borc") %></td> <td><%#Eval("Alacak") %></td> <td><%#Eval("Bakiye") %></td> <td class="xsml"> <!-- 改用Command相关属性传递行标识,移除原OnClick事件 --> <asp:LinkButton ID="lbGetValue" runat="server" CommandName="GetRowData" CommandArgument='<%#Eval("CariKodu") %>'> <span><i class="fas fa-trash-alt"></i></span> </asp:LinkButton> </td> </tr> </ItemTemplate> </asp:Repeater> </ContentTemplate> </asp:UpdatePanel>
步骤2:编写后台事件处理逻辑
在后台代码中实现Repeater的ItemCommand事件,通过CommandArgument拿到当前点击行的唯一标识后,即可获取对应行的全部数据执行后续操作,整个过程只会触发UpdatePanel的局部异步刷新,不会整页回发:
protected void rptCariler_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "GetRowData") { // 获取当前行的唯一标识,这里用的是绑定的CariKodu string currentCariKodu = e.CommandArgument.ToString(); // 示例:根据CariKodu获取当前行的所有业务数据,可替换为你自己的逻辑 // DataRow row = 你的数据集合.Select($"CariKodu='{currentCariKodu}'").FirstOrDefault(); // 后续的删除、查询、赋值等操作都在这里写 } }
注意事项
- Repeater的数据绑定代码要放在
if(!IsPostBack)判断块内,避免异步回调时重新绑定导致数据丢失 - 如果需要获取当前行内其他控件的值,可以通过
e.Item.FindControl("控件ID")的方式获取 - 如果需要在事件处理后更新UpdatePanel外的页面内容,可将对应内容也放入独立的UpdatePanel中,或设置UpdatePanel的UpdateMode为Conditional后手动调用
UpdatePanel1.Update()方法刷新
内容的提问来源于stack exchange,提问作者Mehmet Akif
相关产品推荐
相关产品推荐

