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

ASP.NET MVC调用DisableUser方法出现HttpHandler执行错误排查

问题分析与解决方案

核心问题1:URL生成方式错误导致提前触发Action调用

你使用@Html.Action("DisableUser","Admin")生成AJAX请求URL是错误的:

  • Html.Action的作用是在页面渲染阶段直接执行指定Action并返回其视图内容,而非生成Action的请求地址。
  • 你的DisableUser方法标记了[HttpPost],仅接收POST请求,但Html.Action默认发送GET请求调用该方法,这会导致页面渲染时就触发"找不到GET版本的DisableUser方法"的错误,也就是你看到的内部异常。

修复方案:
改用@Url.Action("DisableUser", "Admin")生成正确的请求地址,它只会生成URL字符串,不会提前执行Action:

$('#usersList').on('click', 'button[id^="delete_"]', function () {
    var userId = this.id.replace("delete_", "");
    $.ajax({
        type: 'POST',
        url: "@Url.Action("DisableUser","Admin")",
        data: { UserID: userId },
        success: function (response) {
            console.log('User deleted successfully');
            // 可添加DataTable刷新逻辑,比如重新加载数据
            $('#usersList').DataTable().ajax.reload();
        },
        error: function (error) {
            console.error('Error deleting user', error);
        }
    });
});

核心问题2:Action返回类型不符合AJAX请求需求

你的DisableUser方法最终返回View("AllUsersData", users),这会返回完整的视图内容,但AJAX请求通常需要JSON格式的响应(比如操作状态、更新后的数据),而非整个视图。这种返回方式会导致响应内容不符合预期,甚至引发后续渲染错误。

修复方案:
修改Action返回JsonResult,直接返回操作状态和数据:

[HttpPost]
public JsonResult DisableUser(int UserID)
{
    string message = "";
    bool success = false;
    if (UserID != 0 && UserID > 0)
    {
        int result = _helper.DisableUser(UserID);

        switch (result)
        {
            case 1:
                message = "User disabled successfully";
                success = true;
                break;

            case -1:
                message = "Error disabling user";
                break;

            default:
                message = "Unknown error";
                break;
        };
    }
    else
    {
        message = "Invalid user ID";
    }

    var users = RetrieveUserList();
    return Json(new { Success = success, Message = message, Users = users }, JsonRequestBehavior.AllowGet);
}

在AJAX的success回调中,可根据返回结果更新DataTable:

success: function (response) {
    console.log(response.Message);
    // 用返回的Users数据更新表格
    var table = $('#usersList').DataTable();
    table.clear();
    table.rows.add(response.Users).draw();
}

额外注意点

  • 确保RetrieveUserList()返回List<User>类型集合,保证Json序列化后能被DataTable正确解析。
  • 若AllUsersData是用于渲染表格的PartialView,也可让Action返回PartialViewResult,但需在AJAX回调中用返回的HTML替换页面对应区域,这种方式灵活性不如返回JSON。

内容的提问来源于stack exchange,提问作者codershhoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:26:15