我已经阅读了很多关于如何将JavaScript对象发送到asp.net MVC控制器的博客和stackoverflow答案。但到目前为止我看到的所有示例都要求您知道JavaScript对象将具有哪些属性(因为它们都将JavaScript对象转换为C#对象)。
当我在asp.net webforms中使用PageMethods时,我可以发送任何复杂的JavaScript对象或数组(甚至是分层数据),它将转换为我可以迭代的字典。我有可能在asp.net MVC中做类似的事情吗?
答案 0 :(得分:1)
我现在找到了一种对我有用的方法。
JavaScript代码:
//first include the json2 library for older browsers and jQuery
$.post(url, {json: JSON.stringify(mydata)});
服务器端代码:
public void xyz(string json)
{
JObject j = JObject.Parse(json);
string name = (string)j.SelectToken("Products[0].Name");
//...
}
好事:它是“普通的”json,这意味着它不是一些不常见的格式或接口类型。
编辑:我发现如果我使用.net 4,我甚至不需要C#json-library,因为我可以借助于将任何json字符串转换为字典JavaScriptSerializer:
JavaScriptSerializer jss = new JavaScriptSerializer();
Dictionary<string, object> data = (Dictionary<string, object>) jss.Deserialize<dynamic>(json_string);
答案 1 :(得分:0)
这将转换为字典:
[{"key":0, "value":"something"},{"key":2, "value":"something else"},]
显然,你可以做string,string或int,bool等......
例如,我有一个这样的方法:
public int CollabSortFolder(int FolderId, Dictionary<int, int> Items)
我打电话是使用GET:
/CollabSortFolder?FolderId=111111&Items=[{"Key":3685,"Value":0},{"Key":3670,"Value":1},{"Key":3687,"Value":2}]
现在作为一个GET,它不是很优雅,但是帖子的工作方式也一样。
答案 2 :(得分:0)
你可以做的是使用jQuery插件toDictionary,这个插件会将你的对象转换为asp.net MVC默认模型绑定器可以理解的字典
e.g。
$.ajax({
url: "/SomeURL",
type: "POST",
data: $.toDictionary(dataToSend)
});
记住dataToSend是你的对象
答案 3 :(得分:0)
您是否尝试过使用Request.Forms
词典?
public ActionResult MyAction(FormCollection formValues)
{
}
迭代formValues