ASP .NET Core 2 控制器操作的 AJAX 参数
Posted
技术标签:
【中文标题】ASP .NET Core 2 控制器操作的 AJAX 参数【英文标题】:AJAX paramter to ASP .NET Core 2 Controller Action 【发布时间】:2018-04-18 21:42:16 【问题描述】:我想将 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
是正确的(我也试过记录它),但控制器总是收到null
。这是控制器操作方法代码:
[HttpPost]
public IActionResult Matches([FromBody] string championship)
return Json(championship);
浏览器还会提醒null
。
我还阅读了有关它的其他问题,但没有人工作。
【问题讨论】:
了解 .net core 2 中的模型绑定 如果您只是将对象作为数据传递而不将其包装在另一个对象中,它将起作用 Simple post to Web Api的可能重复 @TheBeardedLlama 我试过了,没用。 【参考方案1】:我解决了使用一个名为Championship
的单一属性的类:
public class Value
public String Championship get; set;
并将其用作 Action 方法中的模型:
[HttpPost]
public IActionResult Matches([FromBody] Value ch)
return Json(ch.Championship);
不知道有没有更简单的方法。
【讨论】:
【参考方案2】:最近,我非常喜欢在 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);
);
就像上面的示例一样,您需要创建一个具有属性的模型(类),并在 ajax 发布到的操作上方添加数据注释 [HttpPost],并将新模型(类)作为参数放入那个行动。这是来自您上面的示例:
型号:
public class Value
public String Championship get; set;
行动:
[HttpPost]
public IActionResult Matches(Value ch)
return Json(ch.Championship);
我已经用过几次了,从来没有使用过 [FromBody] 注释。
【讨论】:
【参考方案3】:尝试删除 ajax 语句中的“contentType”限定符,或者简单地将参数包装在 JSON.stringify 中,即。数据:JSON.stringify(冠军)。
【讨论】:
【参考方案4】:尝试添加 traditional: 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)
)
【讨论】:
仍然为空,在我得到的输出中:Chance3> Executing action method Chance3.Controllers.BetsController.Matches (Chance3) with arguments () - ModelState is Invalid
能把 contentType 和 dataType 行注释掉试试看吗?
我只能评论dataType,但没有任何改变
如果您想保持内容类型为 application/json ,请尝试将您的数据更改为 - data: JSON.stringify( "championship": Champion )以上是关于ASP .NET Core 2 控制器操作的 AJAX 参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.Net Core 的控制器操作和区域中限制参数类型