我一直试图将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":""
}
}
答案 0 :(得分:1)
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会为您执行此操作。