【发布时间】: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);
}
javascript
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")}中方法返回了什么?
标签: jquery asp.net-mvc visual-studio-2013 asp.net-mvc-5