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

__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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:28