ASP.NET MVC 不接受控制器上的 ajax 数据对象

ASP.NET MVC do not accept ajax data object on controller

我已经搜索了一段时间,但没有任何方法可以帮助我解决这个问题。我不知道发生了什么,我曾经使用 JQuery 通过来自 AJAX 的数据对象向控制器发送信息,但在这种情况下,参数到达 null。我的请求看起来像这样(我创建了一个基于按钮点击的函数):

Razor 页面上的 Js 方法

const searchStudy = () => {
        let searchString = JSON.stringify({"searchString": $("#searchString").val()});
        console.log(searchString)

        $.ajax({
            url: "@Url.Action("SearchStudies","Studies")",
            method: "POST",
            processData: false,
            data: searchString,
            contentType: "application/json; charset=UTF-8",
            dataType: "html",
            success: function(response) {
                console.log(response)
                $("#dataContainer").html(response);
            }
        });
    }

控制器

[HttpPost]
public async Task<IActionResult> SearchStudies(string searchString)
{
    if (String.IsNullOrWhiteSpace(searchString))
        return BadRequest("Search something!");

    var studies = await _studyService.GetSearchStudies(searchString);

    return PartialView("~/Views/Studies/_Studies.cshtml", studies);
}

Ps.: 当我尝试在 url 上使用查询数据时,它起作用了。希望你们中的一些人曾经遇到过这个问题:)

为预期要接收的对象创建一个模型class。

public class SearchStudiesModel
{
    public string SearchString { get; set; }
}

更改控制器方法签名以期望接收 SearchStudiesModel 并应用 [FromBody] 从请求正文中获取值。

[HttpPost]
public async Task<IActionResult> SearchStudies([FromBody]SearchStudiesModel model)
{
    if (String.IsNullOrWhiteSpace(model.SearchString))
        return BadRequest("Search something!");

    ...
}

Debugging result