我希望能够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');
}
},
});
答案 0 :(得分:3)
您的操作方法需要一个字符串。创建一个javascript对象,为它提供属性&#34; data&#34;并对您的数据对象进行字符串化以便发送。
更新的代码:
$.ajax({
type: 'post',
dataType: 'json',
url: 'approot\Test',
data: { "json": JSON.stringify(data) },
success: function (json) {
if (json) {
alert('ok');
} else {
alert('failed');
}
},
});