AJAX 参数到 ASP .NET Core 2 控制器操作

AJAX paramter to ASP .NET Core 2 Controller Action

我想将 AJAX 参数传递给 ASP .Net Core 2 中的 MVC 控制器。

这是我试过的:

function getMatchesFromChampionshipAsync(championship) {
    console.log(championship);
    $.ajax({
        url: "/Bets/Matches",
        type: "POST",
        data: { "championship": championship },
        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        success: function (response) {
            alert(response)
        }
    })
}

我确定参数championship是正确的(我也尝试记录它),但是Controller总是收到null
这是Controller Action Method代码:

[HttpPost]
    public IActionResult Matches([FromBody] string championship) {
        return Json(championship);
    }

浏览器也会提醒 null。 我还阅读了有关它的其他问题,但没有人工作。

尝试添加繁体:true

function getMatchesFromChampionshipAsync(championship) {
console.log(championship);
$.ajax({
    url: "/Bets/Matches",
    type: "POST",
    data: { "championship": championship },
    traditional: true,
    dataType: 'json',
    contentType: 'application/json; charset=UTF-8',
    success: function (response) {
        alert(response)
    }
})}

我使用 Class 和一个名为 Championship 的 属性 解决了问题:

public  class Value {
        public String Championship { get; set; }
}

并在 Action 方法中将其用作模型:

[HttpPost]
public IActionResult Matches([FromBody] Value ch) {
    return Json(ch.Championship);
}

不知道有没有更简单的方法

尝试删除 ajax 语句中的 "contentType" 限定符,或者简单地将参数包装在 JSON.stringify 中,即。 data:JSON.stringify(冠军).

最近,我真的很喜欢在 javascript 中使用 formData 对象将数据从 xhr/ajax 传递到 post 到 MVC 操作。这是一个例子:

    var nameFormDataHere = new FormData();
    nameFormDataHere.append("championship", championship);
    $.ajax({
    url: "/Bets/Matches",
    type: "POST",
    data: nameFormDataHere,
    dataType: "json"
    processData: false,
    contentType: false,
    success: function (response) {
        alert(response);
    }
});

就像您上面的示例一样,您需要创建一个带有 属性 的模型(class),并在 ajax 的操作上方添加数据注释 [HttpPost] posting to,以新模型(class)作为参数进入动作。这是来自您上面的示例:

型号:

    public  class Value{
        public String Championship { get; set; }
    }

操作:

    [HttpPost]
    public IActionResult Matches(Value ch) {
        return Json(ch.Championship);
    }

我已经用过好几次了,从来没有用过 [FromBody] 注释。