Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何使用ajax将json字符串发布到控制器方法?_Jquery_Asp.net Mvc_Visual Studio 2013_Asp.net Mvc 5 - Fatal编程技术网

Jquery 如何使用ajax将json字符串发布到控制器方法?

Jquery 如何使用ajax将json字符串发布到控制器方法?,jquery,asp.net-mvc,visual-studio-2013,asp.net-mvc-5,Jquery,Asp.net Mvc,Visual Studio 2013,Asp.net Mvc 5,我希望能够post将json字符串发送到控件操作,但它总是以null的形式接收字符串。如果我为controller方法创建一个视图模型,它会工作,但这不是我想要的,因为需要维护的视图模型太多了 控制器 [HttpPost] public JsonResult Test(string json){ // debugger stops here, but json is null. why? dynamic item = Json.Parse(json); var temp

我希望能够
post
将json字符串发送到控件操作,但它总是以
null
的形式接收字符串。如果我为controller方法创建一个视图模型,它会工作,但这不是我想要的,因为需要维护的视图模型太多了

控制器

[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);
}
[HttpPost]
public JsonResult Test(string json){
    dynamic item = JObject.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');
        }
    },
});
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');
        }
    },
});
谢谢Stephen Muecke的提示,我是这样做的:

控制器

[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);
}
[HttpPost]
public JsonResult Test(string json){
    dynamic item = JObject.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');
        }
    },
});
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');
        }
    },
});
var json={
建议1:‘测试’,
prop2:'test2',
};
风险值数据={
json:json.stringify(json),
};
$.ajax({
键入:“post”,
数据类型:“json”,
url:“批准\测试”,
数据:数据,

//contentType:'application/json',您的操作方法需要一个字符串。创建一个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');
        }
    },
});

删除
contentType:'application/json'
并使用
data:data,
(no
json.stringify()
,然后将方法更改为
public JsonResult Test(string prop1){
prop1
将包含值
'Test'
)@StephenMuecke,我删除了
contentType
并使用
数据
,但仍然得到
null
。然而,我不能只使用
Test(string prop1)
因为json可能包含多个属性,而这些属性在运行时可能是未知的。您是否正在点击控制器-
url:'approt\Test',
应该是
url:'/approt/Test',
(或者要正确执行,那么
url:'@Ul.Action(“Test”,“approt”)“,
success函数(json){if(json){alert(“ok”)}中的方法返回了什么?