繁体   English   中英

将具有未知属性的JavaScript对象发送到asp.net MVC控制器

[英]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中做类似的事情吗?

我现在找到了一种对我有用的方法。

  1. 我将数据转换为json,并在ASP.net MVC控制器中以字符串形式接收。
  2. 然后,我使用json.net库读取数据-因为该库允许我读取数据而无需将其转换为C#(或VB)对象。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM