【问题标题】:jQuery AJAX Post String to MVC Controller Null ParameterjQuery AJAX 将字符串发布到 MVC 控制器空参数
【发布时间】:2021-04-28 14:10:53
【问题描述】:

我正在尝试进行一个非常简单的 AJAX 调用,它是一个搜索字符串,它将一个值作为搜索字符串发布到控制器。

$.ajax({
    url: '/ResultsProcessing/AthleteLookup/n',
    type: 'POST',
    data: searchstring,
    processData: false,
    contentType: "application/x-www-form-urlencoded",
    dataType: 'html',
    success: function (response) {
         console.log(response);
         if (response) {  // check if data is defined
             //Do something
         }
    }
});

但是,无论我尝试配置什么,我的控制器都不会收到字符串参数

[HttpPost]
public async Task<IActionResult> AthleteLookup(string searchstring)

这可能真的很愚蠢。但是如何将搜索参数传递给我的控制器

【问题讨论】:

  • 仍然没有通过。 [FromBody] 导致 415 不受支持的媒体类型

标签: jquery ajax asp.net-core-2.0


【解决方案1】:

尝试修改你的代码如下:

        $.ajax({ 
            url: '/ResultsProcessing/AthleteLookup',
            type: 'POST', 
            data: { "searchstring": $("#txtSearch").val() }, //get the search string
            success: function (response) {
                console.log(response);
                if (response) {  // check if data is defined
                    //Do something
                }
            }
        });

或者您可以在请求 url 的末尾附加搜索字符串,代码如下:

【注意】使用该方法,无需在控制器中设置Ajax方法为Post,使用[HttpPost]属性,可以使用Get方法。

        $.ajax({
            url: '/ResultsProcessing/AthleteLookup/?searchstring=' + $("#txtSearch").val(), 
            type: 'POST',  
            success: function (response) {
                console.log(response);
                if (response) {  // check if data is defined
                    //Do something
                }
            }
        });

控制器代码如下:

    [HttpPost]
    public async Task<IActionResult> AthleteLookup(string searchstring)
    {
        return new JsonResult("Search string: " + searchstring);
    }

测试结果如下:

【讨论】:

  • 在ajax调用中,如果类型是POST那么为什么要在URL后面附加数据呢?那不应该在 ajax 调用中的 data 对象中吗?像这样:data: $("#txtSearch").val() 是否将$("#txtSearch").val() 附加到 URL 使其成为 GET?还是仍然认为是 POST 请求?
  • 您好@sagar1025,感谢您指出,如果将参数附加到URL,则无需将Ajax方法设置为Post并使用[HttpPost]属性,我们可以使用Get 方法。
  • 谢谢你——为了简单起见,我确实把它换成了 Get。我猜应该更 RESTful!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 2016-12-07
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多