__doPostBack未定义错误排查:jQuery-ui/jQuery环境下删除按钮弹窗问题
解决__doPostBack is not defined错误的方案
看起来你是在给删除按钮加jQuery UI确认弹窗后遇到了这个问题,我来帮你捋捋可能的原因和解决办法:
首先,咱们先搞清楚为什么会出现这个错误:__doPostBack是ASP.NET自动生成的回发函数,只有当页面存在<form runat="server">标签,并且有需要触发回发的服务器端控件(比如LinkButton、Button)时,ASP.NET才会在页面里注入这个函数。如果你的代码里手动调用了它,但页面没生成这个函数,或者用了错误的触发方式,就会报这个错。
下面给你两种最靠谱的解决方案,根据你的需求选就行:
方案一:保持原链接,确认后直接跳转(最简单,适合GET请求)
你的原按钮是用@Url.Action生成的GET链接,咱们可以给它加个类,然后用jQuery绑定点击事件,阻止默认跳转,弹出确认框,确认后再跳转到删除地址:
第一步:修改HTML,给链接加class
<td> <a href="@Url.Action("DeleteUser", "Home", new {id = testUser.TestUserId})" class="delete-user-link"> <i class="fa fa-trash fa-lg text-primary"></i> </a> </td>
第二步:写jQuery弹窗逻辑
$(document).ready(function() { // 绑定删除链接的点击事件 $('.delete-user-link').click(function(e) { e.preventDefault(); // 先阻止默认的跳转行为 var deleteUrl = $(this).attr('href'); // 获取删除地址 // 弹出jQuery UI确认对话框 $("#confirm-delete-dialog").dialog({ resizable: false, height: "auto", width: 400, modal: true, buttons: { "确认删除": function() { $(this).dialog("close"); window.location.href = deleteUrl; // 确认后跳转到删除地址 }, "取消": function() { $(this).dialog("close"); } } }); }); });
第三步:添加对话框的HTML(放在页面任意位置)
<div id="confirm-delete-dialog" title="确认删除"> <p>你确定要删除这个用户吗?此操作不可恢复。</p> </div>
这个方案完全不需要用到__doPostBack,直接用普通的页面跳转,不会有这个错误,而且逻辑简单易懂。
方案二:改用服务器端控件,触发合法回发(适合POST请求,更安全)
如果删除操作建议用POST(因为GET请求可能被误触发,或者不符合REST规范),可以改用ASP.NET的LinkButton,让ASP.NET自动处理回发:
第一步:替换成LinkButton控件
<td> <asp:LinkButton runat="server" ID="lnkDeleteUser" CommandArgument='<%# testUser.TestUserId %>' OnClick="lnkDeleteUser_Click" CssClass="delete-user-btn"> <i class="fa fa-trash fa-lg text-primary"></i> </asp:LinkButton> </td>
第二步:后台写删除逻辑(HomeController对应的后台代码)
protected void lnkDeleteUser_Click(object sender, EventArgs e) { LinkButton btn = (LinkButton)sender; int userId = int.Parse(btn.CommandArgument); // 这里写你的删除用户逻辑,比如调用DeleteUser方法 // 完成后可以跳转回列表页面 Response.Redirect("~/Home/UserList"); }
第三步:jQuery弹窗绑定
$(document).ready(function() { $('.delete-user-btn').click(function(e) { e.preventDefault(); // 阻止默认回发 var $deleteBtn = $(this); $("#confirm-delete-dialog").dialog({ resizable: false, height: "auto", width: 400, modal: true, buttons: { "确认删除": function() { $(this).dialog("close"); $deleteBtn[0].click(); // 触发LinkButton的原生点击,自动调用__doPostBack }, "取消": function() { $(this).dialog("close"); } } }); }); });
这个方案要确保页面里有<form runat="server">标签,因为ASP.NET需要这个来生成回发脚本。只要有这个表单和服务器端控件,__doPostBack函数就会自动生成,不会报错。
排查小技巧
如果还是遇到__doPostBack未定义的问题,你可以:
- 查看页面源代码,搜索
__doPostBack,看是否存在这个函数。如果没有,检查页面是否有<form runat="server">,以及是否有服务器端控件(比如LinkButton、Button)。 - 不要手动调用
__doPostBack,因为它的参数(比如控件的唯一ID)可能会因为页面结构变化而改变,容易出错。
内容的提问来源于stack exchange,提问作者StephanM
相关产品推荐
相关产品推荐

