使用Ajax将JSON数据发布到MVC控制器

时间:2014-07-22 08:55:41

标签: jquery ajax asp.net-mvc json asp.net-mvc-4

我一直试图将JSON数据传递给MVC4控制器,到目前为止还没有工作。

此外,我已经搜索过这一千次了。

解决这个问题的关键是对JSON对象进行字符串化,定义模型并将参数作为定义的模型,或者定义contentType。

我做了那些但是定义了一个将JSON传递给控制器​​的模型。

如果每次尝试将JSON参数传递给服务器时都必须定义模型,我不打算在MVC4上构建我的应用程序,我会放弃!

是否有另一种方法可以在控制器中从Ajax调用获取JSON数据,而无需为JSON数据创建模型?

这是我的示例代码。

[HttpPost]
public ActionResult DATACRUD(string XmlParms)
{
    return Json(new{ data = XmlParms });
}
// Just example.

Ajax调用是。

$.ajax({
        type: "POST",
        url: "DATACRUD.json",
        data: JSON.stringify({data:"test"}),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false, //_async,
        success: function (result) {
        }
});

Ajax成功调用控制器中的操作,但参数为null。

请不要告诉我定义JSON参数的模型是解决此问题的唯一方法。

如果我必须这样做,那将是非常令人沮丧的。


更新:

如果我必须匹配密钥名称和参数名称,我也会放弃。

JSON数据通常在我的应用中看起来像这样。

{
    "service": "COMMON",
    "method": "MENU_SUBLIST",
    "UID": "1000007",
    "ULID": "stackoverflow",
    "UNM": "queston", 
    "SITE": "1",
    "DEPT": "2",
    "LANG": "ko", 
    "MENUID": "0000",
    "STEPMENU": "",
    "ACTIONNAME": "" 
}

但事实是,有很多种JSON数据,包括各种关键名称。

我无法一一列举姓名。在这种情况下,我该怎么办?

并确保,将以下数据包装起来对我来说不是解决方案,存在兼容性问题。

{ XmlParms : {         
    "service":"COMMON",
    "method":"MENU_SUBLIST",
    "UID":"1000007",
    "ULID":"stackoverflow",
    "UNM":"queston",
    "SITE":"1",
    "DEPT":"2",
    "LANG":"ko",
    "MENUID":"0000",
    "STEPMENU":"",
    "ACTIONNAME":""
    }
}

3 个答案:

答案 0 :(得分:1)

你错过了一件小事。参数名称在ajax调用中应该相同。

    data: JSON.stringify({XmlParms:"test"}),

答案 1 :(得分:0)

因为您的控制器接受名为XmlParms的参数,因此为了使其正确绑定,您必须传递具有相应参数名称的数据

假设您的json数据将被分配到javascript变量名jsonParams。然后你所要做的就是:

$.ajax({
        type: "POST",
        url: "DATACRUD.json",
        data: {XmlParms:jsonParams},
        contentType: "application/json; charset=utf-8",
        dataType: "application/xml-urlencode",
        async: false, //_async,
        success: function (result) {
        }
});

您只需将其作为纯字符串传递,并将其解析回控制器中的json对象

答案 2 :(得分:0)

首先,Action中的匿名对象语法不正确;密钥的值为=,而不是:

[HttpPost]
public ActionResult DATACRUD(string XmlParms)
{
    return Json(new { data = XmlParms });
}

其次,您的操作是期望一个名为XmlParms的参数,但您只是在AJAX中发送一个字符串。试试这个:

$.ajax({
    type: "POST",
    url: "DATACRUD.json",
    data: { XmlParms: "test" },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (result) {
        console.log(result.data); // = 'test'
    }
});

请注意,您不需要手动使用JSON.stringify,因为当您将对象提供给data属性时,jQuery会为您执行此操作。