我想将一个AJAX参数传递给ASP .Net Core 2中的MVC控制器。
这是我试过的:
championship
我确定参数null
是正确的(我也尝试记录它),但控制器总是收到[HttpPost]
public IActionResult Matches([FromBody] string championship) {
return Json(championship);
}
。
这是控制器操作方法代码:
null
浏览器还会提醒CREATE TABLE [tblExample](
[ExampleID] [int] IDENTITY(1,1) NOT NULL,
[WordsAndStuff] [nvarchar](max) NOT NULL,
[Active] [bit] NOT NULL
。
我也读过有关它的其他问题,但没人工作。
答案 0 :(得分:4)
我解决了使用名为Championship
的单个属性的类:
public class Value {
public String Championship { get; set; }
}
并在Action方法中将其用作模型:
[HttpPost]
public IActionResult Matches([FromBody] Value ch) {
return Json(ch.Championship);
}
我不知道是否有更简单的方法。
答案 1 :(得分:1)
最近,我真的很喜欢在javascript中使用formData对象将数据从xhr / ajax传递到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);
}
});
就像上面的示例一样,您将需要创建一个具有属性的模型(类),并将数据注释[HttpPost]置于ajax要发布到的操作上方,并将新模型(类)作为参数那个行动。这来自上面的示例:
型号:
public class Value{
public String Championship { get; set; }
}
操作:
[HttpPost]
public IActionResult Matches(Value ch) {
return Json(ch.Championship);
}
我已经使用过几次,并且从不需要使用[FromBody]批注来起作用。
答案 2 :(得分:0)
尝试删除ajax语句中的“ contentType”限定符,或仅将参数包装在JSON.stringify中。数据:JSON.stringify(championship)。
答案 3 :(得分:-1)
尝试添加传统: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)
}
})}