为什么我要匹配参数名称从ajax调用在MVC4 web应用程序的json数据
本文关键字:web MVC4 应用程序 数据 json 调用 ajax 我要 参数 为什么 | 更新日期: 2023-09-27 18:14:13
我只是想知道为什么它是必要的。net匹配参数名称与JSON对象的键名?
快速代码预览在这里…
var json = {
"service": "COMMON",
"method": "MENU_SUBLIST",
"UID": "1000007",
"ULID": "stackoverflow",
"UNM": "queston",
"SITE": "1",
"DEPT": "2",
"LANG": "ko",
"MENUID": "0000",
"STEPMENU": "",
"ACTIONNAME": ""
}
好的,让我们通过Ajax调用控制器中的一个动作。
$.ajax({
type: "POST",
url: "DATACRUD.json",
data: JSON.stringify(json),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false, //_async,
success: function (result) {
}
});
和我的c#操作代码在这里…
[HttpPost]
public ActionResult DATACRUD(string jsondata)
{
return Json(new{ fromMVC = jsondata});
}
// Just example.
jsondata在这里是null因为我没有匹配键名。
对于DATACRUD获取JSON数据,我必须这样做。
{ jsondata : {
"service":"COMMON",
"method":"MENU_SUBLIST",
"UID":"1000007",
"ULID":"stackoverflow",
"UNM":"queston",
"SITE":"1",
"DEPT":"2",
"LANG":"ko",
"MENUID":"0000",
"STEPMENU":"",
"ACTIONNAME":""
}
}
这里的问题1为什么我必须匹配键名与参数名?
就是这样吗?一定有原因,我想知道为什么。
我想做的是…
{
"service":"COMMON",
"method":"MENU_SUBLIST",
"UID":"1000007",
"ULID":"stackoverflow",
"UNM":"queston",
"SITE":"1",
"DEPT":"2",
"LANG":"ko",
"MENUID":"0000",
"STEPMENU":"",
"ACTIONNAME":""
}
将JSON数据传递到action, DATACRUD I上面指定的
我想要DATACRUD动作采取JSON数据,并消费它,无论键名是什么。
还有另一个答案。答案是为JSON数据创建一个模型,并将其作为模型类型接收,并将模型作为字符串获取。
但是在我的应用程序中定义模型是不可能的。它可能会导致100个模型的创建。
所以在制作模型后接收JSON数据是我最不需要的。
在这种情况下,我应该怎么做?
不允许键名匹配。
不允许生成模型。
不允许使用第三方框架。
我认为可能的答案缩小到几个....
我该怎么做?
MVC路由引擎规定参数名必须匹配,因为这就是它如何知道填充什么,因为所有内容都以字符串的形式传递给服务器。MVC管道将搜索URL的查询部分,甚至在POST上搜索表单中的字段来填充您的所有参数。
对于一个复杂的项目来说,拥有100个模型并不是那么糟糕。但是,如果您必须返回并修改整个应用程序,这可能是一种痛苦。
无论你做什么,你都需要确保你的JavaScript变量名与你的Action方法参数匹配,这应该不是问题,因为你两边都写。
基于后MVC控制器:从HTTP体获取JSON对象?你的动作应该是:
[HttpPost]
public ActionResult DATACRUD()
{
Stream req = Request.InputStream;
req.Seek(0, System.IO.SeekOrigin.Begin);
string json = new StreamReader(req).ReadToEnd();
return Json(new { fromMVC = json });
}