ASP.NET MVC4 C#发布JSON数据的问题

时间:2014-01-28 18:10:26

标签: c# jquery asp.net-mvc json asp.net-mvc-4

我在ASP.NET MVC 4上发布json数据时遇到了问题。

当我调用ajax函数时,我收到以下错误:302 Found。

jQuery代码:

var dataJson = [];

dataJson.push({
    name: "Renato Leite"
});

$.ajax({
    url: "/Controller/MyAction",
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(dataJson),
    contentType: 'application/json; charset=utf-8',
    async : false,
    success: function (data) {
        var message = data.Message;
    }
});

C#代码:

public ActionResult MyAction(string name)
{
    return Json(new { Message = "Sucess" }, JsonRequestBehavior.AllowGet);
}

请求的返回:

  

状态代码:302找到

如何解决这个问题?

8 个答案:

答案 0 :(得分:3)

您的操作只接受字符串参数。目前您正在传递一个字符串数组。因此你得到错误

只需使用

var dataJson = {
    name: "Renato Leite"
};

答案 1 :(得分:1)

您不需要对单个字符串进行字符串化。尝试用此

替换数据行
data: { name: "Renato Leite" },

答案 2 :(得分:1)

奇怪,我把你的确切代码放到我的项目中,我得到了正确的数据。

也许尝试将结果更改为JsonResult而不是ActionResult?

答案 3 :(得分:1)

您应该将以下属性添加到您的操作方法,因为您的ajax调用使用“POST”方法

[HttpPost]

答案 4 :(得分:1)

检查此解决方案 -

控制器 -

public ActionResult SubmitTag(string test)
{
    return Json(new { Message = "Sucess" }, JsonRequestBehavior.AllowGet);
}

查看 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
    $(function () {
        $("#ClickMe").click(function () {

            var tag = {
                "test": "SampleTag"
            };

            $.ajax({
                url: "@Url.Action("SubmitTag")",
                type: "POST",
                data: JSON.stringify(tag),
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    alert(data.Message);
                },
                error: function (response) {
                    alert(response.responseText + "e");
                }
            });
        });
    });
</script>

<input type="button" id="ClickMe" value="ClickMe" />

输出 -

enter image description here

答案 5 :(得分:1)

由于@nboisvert指出您正在发帖,因此您的操作需要[HttpPost]属性。 正如@Satpal所指出的那样,你的JSON有效负载实际上是一个对象数组,它被发布到一个只接受字符串参数的方法。

var dataJson = [];

dataJson.push({
    name: "Renato Leite"
});
JSON.stringify(dataJson); // "[{"name":"Renato"}]" notice the square brackets

你可以轻松发布

data: JSON.stringify({name: "Renato Leite"});

答案 6 :(得分:0)

我发现了这个问题,我有两个同名的动作,所以发生了错误。无论如何欣赏帮助! :)

答案 7 :(得分:0)

尝试将Controller Action参数更改为Ienumerable字符串,例如string [] name或IEnumerable name。方括号用于数组。