【问题标题】:Ajax Request: Json Data Not Being Passed to ControllerAjax 请求:Json 数据未传递给控制器
【发布时间】:2019-05-16 16:05:16
【问题描述】:

我正在构建一个在 ASP.NET Core 中搜索文档的程序。我通过 Ajax 请求将搜索数据从文本框传递到控制器,但控制器没有接收到字符串。

我尝试更改 ajaxData 字段的定义方式,在“搜索”周围添加引号,甚至将整个内容转换为字符串,但我无法将其传递给控制器​​。

这是请求的代码:

ajaxData = {search: $("#textSearchBox").val()}

console.log(ajaxData);

$.ajax({
    type: 'POST',
    url: "@Url.Action("GetDocuments", "DocumentSearchApi")",
    data: ajaxData,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    error: function (e) {
        //Error Function
    },
    success: function (jsonData) {
        //Success Function
    },
    fail: function (data) {
        //Fail Function
    }
});

这是Controller的GetDocuments函数的顶部:

[Route("GetDocuments")]
public async Task<IActionResult> GetDocuments(string search)
{

任何地方都没有错误消息。控制台显示一个包含“搜索:“测试””的对象,但是当我在 GetDocuments 中命中断点时,“搜索”为空。

【问题讨论】:

    标签: javascript c# json asp.net-core asp.net-core-mvc


    【解决方案1】:

    我认为在这种情况下使用 GET 是更优雅的方式,那么您应该将代码更改为

    var ajaxData = $("#textSearchBox").val();
    url: "@Url.Action("GetDocuments", "DocumentSearchApi")"?search=ajaxData 
    

    并删除数据:ajaxData

    因为你想从搜索中得到一些东西。当你想从 API 修改数据时,使用 post

    【讨论】:

    • 如果我正在寻找"Tom &amp; Jerry"怎么办?
    • 那么您应该在服务器端使用 string.split() 拆分搜索,然后根据 2 个条件 tom and jerry 进行查询
    • "Tom &amp; Jerry" 不会像 "Tom &amp; Jerry" 一样到达服务器,因此没有什么可拆分的(当我在寻找 "Tom &amp; Jerry" 而不是 "Tom" AND "Jerry" 时,这很奇怪)
    • 嗯,那么我认为您需要将字符串提交到服务器并根据内容进行搜索?我不知道你想如何在后端实现搜索,所以我不能给出我的意见
    • 他问为什么没有将json数据传递给控制器​​,最佳实践或方法是另一个线程,当有人搜索类似这个问题的内容时会发现其他内容
    【解决方案2】:

    在向网络服务器发送数据时需要使用 JSON.stringify(),数据必须是字符串而不是对象

    $.ajax({
        type: 'POST',
        url: "@Url.Action("GetDocuments", "DocumentSearchApi")",
        data: JSON.stringify(ajaxData),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        error: function (e) {
            //Error Function
        },
        success: function (jsonData) {
            //Success Function
        },
        fail: function (data) {
            //Fail Function
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多