ASP.NET中ListView控件Luser触发未处理ItemDeleting事件报错求解
报错原因
你在删除按钮上使用了ASP.NET ListView内置的命令名CommandName="Delete",控件识别到该命令后会自动触发ItemDeleting事件,你未对该事件做绑定处理,因此抛出异常。
解决方案(二选一即可)
方案1:修改为自定义命令名(推荐,操作最简单)
- 前端把删除按钮的
CommandName从Delete改为自定义名称,比如:
<asp:LinkButton ID="DeleteButton" CommandArgument='<%#Eval("User_Id")%>' CommandName="CustomDelete" runat="server">Delete</asp:LinkButton>
- 后端
Luser_ItemCommand方法里的判断条件对应修改:
if (e.CommandName == "CustomDelete")
方案2:保留内置Delete命令,新增ItemDeleting事件处理
- 在你的ListView控件标签上添加事件绑定属性:
<asp:ListView ID="Luser" runat="server" OnItemDeleting="Luser_ItemDeleting" ......>
- 后端新增对应事件处理方法,空实现即可阻断报错:
protected void Luser_ItemDeleting(object sender, ListViewDeleteEventArgs e) { // 无需额外逻辑,你的删除逻辑已经在ItemCommand中处理 // 也可以选择把删除逻辑迁移到这个方法内 }
代码优化建议
你当前的删除逻辑不需要额外查找控件拿参数,可以直接通过事件参数获取CommandArgument,简化代码:
protected void Luser_ItemCommand(object sender, ListViewCommandEventArgs e) { if (e.CommandName == "CustomDelete") // 对应你使用的命令名 { int userId = Convert.ToInt32(e.CommandArgument); User ue = db.Users.First(x => x.User_Id == userId); ue.Delete_record = "Yes"; db.SubmitChanges(); preload(); StMsg("Yes", "Record deleted succesfully"); } }
内容的提问来源于stack exchange,提问作者Syeda
相关产品推荐
相关产品推荐

