如何使用 ajax 将 json 字符串发布到控制器方法?
Posted
技术标签:
【中文标题】如何使用 ajax 将 json 字符串发布到控制器方法?【英文标题】:How to use ajax to post json string to controller method? 【发布时间】:2015-09-08 13:34:48 【问题描述】:我希望能够将post
json 字符串传递给控制操作,但它始终以null
接收字符串。如果我为控制器方法创建一个视图模型,它可以工作,但这不是我想要的,因为要维护的视图模型太多。
控制器
[HttpPost]
public JsonResult Test(string json)
// debugger stops here, but json is null. why?
dynamic item = Json.Parse(json);
var temp = item.prop1;
return Json(false, JsonRequestBehavior.DenyGet);
var data =
prop1: 'test',
prop2: 'test2',
;
$.ajax(
type: 'post',
dataType: 'json',
url: 'approot\Test',
data: JSON.stringify(data),
contentType: 'application/json',
success: function(json)
if (json)
alert('ok');
else
alert('failed');
,
);
感谢 Stephen Muecke 的提示,我得到了它的工作方式:
控制器
[HttpPost]
public JsonResult Test(string json)
dynamic item = JObject.Parse(json);
var temp = item.prop1;
return Json(false, JsonRequestBehavior.DenyGet);
javascript
var json =
prop1: 'test',
prop2: 'test2',
;
var data =
json: JSON.stringify(json),
;
$.ajax(
type: 'post',
dataType: 'json',
url: 'approot\Test',
data: data,
// contentType: 'application/json', <-- no need this.
success: function(json)
if (json)
alert('ok');
else
alert('failed');
,
);
【问题讨论】:
删除contentType: 'application/json'
并使用data: data,
(没有JSON.stringify()
然后将方法更改为public JsonResult Test(string prop1)
(prop1
将包含值'test'
)
@StephenMuecke,我删除了contentType
并使用了data
,但仍然得到null
。但是,我不能只使用Test(string prop1)
,因为 json 可能包含多个属性,并且这些属性在运行时可能是未知的。
你在敲控制器吗?url: 'approot\Test',
应该是 url: '/approot/Test',
(或者要正确操作,然后是 url: '@Ul.Action("Test", "approot")',
请问成功函数(json) if (json)alert("ok")中方法返回了什么?
【参考方案1】:
您的操作方法需要一个字符串。创建一个 javascript 对象,为其赋予属性“data”并将您的数据对象字符串化以发送。
更新代码:
$.ajax(
type: 'post',
dataType: 'json',
url: 'approot\Test',
data: "json": JSON.stringify(data) ,
success: function (json)
if (json)
alert('ok');
else
alert('failed');
,
);
【讨论】:
以上是关于如何使用 ajax 将 json 字符串发布到控制器方法?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 和 ajax 将 json 对象发布到 mvc 控制器
无法在 asp.net 核心中使用 ajax 将 json 发布到控制器
如何使用ajax将包含上传文件和字符串的数据对象发送到控制器?