为什么我要匹配参数名称从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数据是我最不需要的。

在这种情况下,我应该怎么做?

不允许键名匹配。

不允许生成模型。

不允许使用第三方框架。

我认为可能的答案缩小到几个....

我该怎么做?

为什么我要匹配参数名称从ajax调用在MVC4 web应用程序的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 });
}