我希望将值从我的视图传递给控制器操作,但是每次我执行此参数时,该参数为null。我看过多个关于相同内容的文章,但似乎不太正确。我的代码在下面
控制器动作
[HttpPost]
public IActionResult GetTest(string data)
{
var jSon = JsonConvert.SerializeObject(channles[0]);
return Json(jSon);
}
查看(AJAX)代码
function testAjax() {
$("#searchButton1").click(function () {
$.ajax({
type: "POST",
url: '@Url.Action("GetTest", "DataGridWebApi")',
data: { data: "test" },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert("Hello: " + response.Name + " .\nCurrent Date and Time: " + response.DateTime);
},
failure: function (response) {
alert(response.responseText);
},
error: function (response) {
alert(response.responseText);
}
});
});
}
我在控制器操作中遇到了断点,但是参数始终为null。我还尝试将控制器动作更改为接受对象而不是字符串,但是似乎没有任何作用。
我在做什么错?
答案 0 :(得分:1)
删除行:contentType: "application/json; charset=utf-8",
应该可以使它工作。就在昨天,我遇到了完全相同的问题。我们有进行JSON调用的标准方法,并且有人也插入了这一行,从而导致对象无法在控制器上绑定。
答案 1 :(得分:1)
您需要进行两项更改。您确实需要在参数上使用[FromBody]
:
public IActionResult GetTest([FromBody]string data)
然后,您只需要发送字符串作为JSON:
data: JSON.stringify("test")
这似乎有些怪异,但是如果没有JSON.stringify
,它将以test
的形式发送,您需要"test"
。简而言之,您要发送的字符串具有JSON内容类型,因此它必须是 JSON字符串。
答案 2 :(得分:0)
尝试在控制器参数的[FromBody]
之前添加string data
。 Here is why