![](/img/trans.png)
[英]Ajax post to ASP.net MVC controller - object properties are null
[英]send JavaScript object with unknown properties to asp.net MVC controller
我已经阅读了很多博客和关于如何将JavaScript对象发送到asp.net MVC控制器的stackoverflow答案。 但是到目前为止,我所看到的所有示例都要求您知道JavaScript对象具有哪些属性(因为它们都将JavaScript对象转换为C#对象)。
当我在asp.net网络表单中使用PageMethods时,我可以发送任何复杂的JavaScript对象或数组(甚至是分层数据),并将其转换为我可以迭代的Dictionary。 我有机会在asp.net MVC中做类似的事情吗?
我现在找到了一种对我有用的方法。
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");
//...
}
好东西:它是“ normal” json,这意味着它不是一种不常见的格式或接口类型。
编辑:我发现如果我使用.net 4,我什至不需要C#json-library-因为我可以借助JavaScriptSerializer将任何json字符串转换为Dictionary:
JavaScriptSerializer jss = new JavaScriptSerializer();
Dictionary<string, object> data = (Dictionary<string, object>) jss.Deserialize<dynamic>(json_string);
这将被转换为字典:
[{"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,它不是很优雅,但是帖子将以相同的方式工作。
您可以使用jQuery插件toDictionary进行操作,此插件会将您的对象转换为asp.net MVC默认模型绑定程序可以理解的字典
例如
$.ajax({
url: "/SomeURL",
type: "POST",
data: $.toDictionary(dataToSend)
});
记住dataToSend是您的对象
您是否尝试过使用Request.Forms
词典?
public ActionResult MyAction(FormCollection formValues)
{
}
遍历formValues
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.