【问题标题】:Ajax GET request data is not reaching to view from controller in ASP.NET Core MVC on successAjax GET 请求数据在成功时无法从 ASP.NET Core MVC 中的控制器查看
【发布时间】:2020-02-18 15:47:08
【问题描述】:

在我在 .NET Core (2.2) MVC 中的应用程序中,我正在使用 ajax 使用用户输入向我的控制器发出 get 请求。

代码如下:

 $.ajax({
            type: 'GET',
            url: "/BuildSheetsArea/TesterParameters/GetMassEditing",
            data: { 'ChangeTypeId': ChangeTypeId, 'param': param, 'ParameterValue': ParameterValue },
            dataType: 'json',
            success: function (data) {
                alert('success');
                console.log(data);

            },
            error: function (emp) {
                alert('error');
            }
        });

我的控制器成功命中,我的控制器正在返回结果。

这是我的控制器代码:

[HttpGet]
public System.Web.Mvc.JsonResult GetMassEditing(string ChangeTypeId, string param, string ParameterValue = "")
{
    List<TesterParameterMassEditingViewModel> finalList = new List<TesterParameterMassEditingViewModel>();

    // Code to perform necessary action

    return new System.Web.Mvc.JsonResult { Data = finalList, JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet };
}

这是控制器成功返回结果的屏幕截图

但是关于成功,我没有得到任何我的看法。正如您在关于成功的 ajax 调用中看到的那样,我正在尝试将数据从控制器写入控制台,但在控制器返回数据后什么都没有发生。它永远不会回到我的 ajax 成功函数。

我错过了什么吗?请帮忙。

我正在使用 .NET Core 2.2 和 Entity Framework Core 2.2.6

编辑: 在此处添加网络选项卡结果截图

EDIT2: 在@Rena 建议我更改代码之后。但现在我遇到了一个新问题。当我尝试执行数据库查询时,从我的控制器 retun 中的任何尝试传递对象,我的请求进入挂起状态。说明如下。 这是我的 AXAJ 请求:

$.ajax({
            type: 'POST',
            url: "/BuildSheetsArea/TesterParameters/GetMassEditing",
            data: {'ChangeTypeId': ChangeTypeId, 'param': param, 'ParameterValue': ParameterValue },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                debugger;
                alert('success');
                console.log(data);
            },
            error: function (emp) {
                alert('error');
            },
        });
    });

这是我的控制器代码:

        [HttpPost]
    public async Task<JsonResult> GetMassEditing(string ChangeTypeId, string param, string ParameterValue)
    {
        List<TesterParameter> deviceList = await _context.TesterParameters.ToListAsync();
        string val = "See from console";
        return Json(deviceList);
    }

我的设备列表中有 120 个对象。这种情况在浏览器的网络选项卡中我得到了这个。我的第一个请求处于待处理状态,我的 ajax 成功方法中没有任何结果。

但是如果我不做任何数据库查询而只返回一个字符串,它就可以正常工作

        [HttpPost]
    public async Task<JsonResult> GetMassEditing(string ChangeTypeId, string param, string ParameterValue)
    {
        string val = "See from console";
        return Json(val);
    }

在第三种情况下,如果我只执行 db 查询但返回简单字符串,我的网络选项卡会显示未决的请求,而在 ajax 成功方法中我什么也得不到。

请帮忙。

【问题讨论】:

  • 如果你删除 dataType: 'json' 会起作用吗?
  • 我试过删除 datatype: 'json' 。但还是一样。
  • 你看到alert('success')了吗?还要在开发工具的网络选项卡中检查请求的状态。
  • 嗨,不,我看不到警报成功 :( 并且在我的网络选项卡中显示请求的状态 200。我正在将网络选项卡屏幕截图添加到我的帖子中
  • 好的,有一点可能是错误的,即使失败了你也能成功,你可以尝试在浏览器窗口中正常执行请求并检查响应吗?

标签: .net ajax .net-core asp.net-core-mvc entity-framework-core


【解决方案1】:

如果你确定你使用的是asp.net core 2.2,你需要使用Microsoft.AspNetCore.Mvc.JsonResult而不是System.Web.Mvc.JsonResult

如下改变:

[HttpGet]
public Microsoft.AspNetCore.Mvc.JsonResult GetMassEditing(string ChangeTypeId, string param, string ParameterValue = "")
{
    List<TesterParameterMassEditingViewModel> finalList = new List<TesterParameterMassEditingViewModel>();

    // Code to perform necessary action

    return new JsonResult(finalList);
}

结果:

【讨论】:

  • 非常感谢。我已经更改了我的代码。但是现在有一个奇怪的问题。我在 Edit2 下的帖子中进行了更新。请帮忙
  • 你需要给GetMassEditing方法设置断点(这一行:List&lt;TesterParameter&gt; deviceList = await _context.TesterParameters.ToListAsync();)。之所以一直挂起是因为你从数据库中读取了很多数据,它需要很长时间才能响应。您需要调试服务器端代码并​​等待从数据库中读取数据然后进入return Json(deviceList);。无需在js中设置调试器。参考how to debug in vs
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多