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

时间:2011-08-19 12:18:53

标签: javascript asp.net-mvc json asp.net-mvc-3 jquery

我已经阅读了很多关于如何将JavaScript对象发送到asp.net MVC控制器的博客和stackoverflow答案。但到目前为止我看到的所有示例都要求您知道JavaScript对象将具有哪些属性(因为它们都将JavaScript对象转换为C#对象)。

当我在asp.net webforms中使用PageMethods时,我可以发送任何复杂的JavaScript对象或数组(甚至是分层数据),它将转换为我可以迭代的字典。我有可能在asp.net MVC中做类似的事情吗?

4 个答案:

答案 0 :(得分:1)

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

  1. 我正在将我的数据转换为json并在我的ASP.net MVC控制器中将其作为字符串接收。
  2. 然后我使用json.net库来读取数据 - 因为这个库允许我读取数据而不将其转换为C#(或VB)对象。
  3. 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