为什么ajax发送给控制器的参数为空?

Why ajax send parameters to controller is null?

我通过 ajax 向控制器发送 post 请求:

这是我在 cshtml 文件中的代码:

<script>
    $("#btnSeachAjax").click(function () {
        var token = $('input[name="__RequestVerificationToken"]').val();    
        $.ajax({
            url: '@Url.Action("Search")',
            data: { id: "1",title:"ba"},
            contentType: 'application/json',
            type: 'POST',
            headers: {
                "RequestVerificationToken": token
            },
            success: function (data) {
                $("#data").html(data);
            }
            ,
            error: function (req, status, error) {
                alert(error);
            }
        });
        return false;
    });
</script>

这是我在控制器中的代码:

 [HttpPost, ActionName("Search")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Search([FromBody] string id,string title)
        {
            var movie = await _context.Movies.FindAsync(id);
            return View(movie);
        }

id 的值,控制器中的 title = null

为什么ajax向控制器发送参数为空?

我使用Asp.netmvc net core 3.1.

public async Task<IActionResult> Search([FromBody] string id,string title)

Value of id , title in controller = null.

根据您的操作方法和接受的参数,您可以尝试如下修改Ajax代码。

$.ajax({
    url: '@Url.Action("Search")'+'?title=ba',
    data: JSON.stringify("1"),
    contentType: 'application/json',
    type: 'POST',
    //...

此外,您可以创建一个视图模型并修改您的操作以接受复杂类型参数,如下所示。

public class MyData
{
    public string Id { get; set; }
    public string Title { get; set; }
}

操作方法

public async Task<IActionResult> Search([FromBody] MyData myData)
{
    //...

在 JS 客户端

$.ajax({
    url: '@Url.Action("Search")',
    data: JSON.stringify({ id: "1", title: "ba" }),
    contentType: 'application/json',
    type: 'POST',
    //...