【问题标题】:send JavaScript object with unknown properties to asp.net MVC controller将具有未知属性的 JavaScript 对象发送到 asp.net MVC 控制器
【发布时间】:2011-08-19 12:18:52
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我现在找到了一种适合我的方法。

    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");
        //...
    }
    

    好消息:它是“普通”的 json,这意味着它不是一些不常见的格式或接口类型。

    编辑: 我发现如果我使用 .net 4,我什至不需要 C# json-library - 因为我可以在JavaScriptSerializer:

    JavaScriptSerializer jss = new JavaScriptSerializer();
    Dictionary<string, object> data = (Dictionary<string, object>) jss.Deserialize<dynamic>(json_string);
    

    【讨论】:

      【解决方案2】:

      你可以做的是使用jQuery插件toDictionary,这个插件会将你的对象转换为asp.net MVC默认模型绑定器可以理解的字典

      例如

       $.ajax({
          url: "/SomeURL",
          type: "POST",
          data: $.toDictionary(dataToSend)
         });
      

      记住 dataToSend 是你的对象

      【讨论】:

      • 看起来很有希望 - 但我不确定它是否能满足我的需求,因为我无法让它工作。我不知道 mvc 控制器中的参数使用什么类型。在博客示例中,他仅使用“预定义类”(Person 和 Car)来展示它,但我没有这样的服务器端类,因为我不知道 JavaScript 对象将具有哪些属性。
      【解决方案3】:

      这将被转换为字典:

      [{"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 它不是很优雅,但一个帖子会以同样的方式工作。

      【讨论】:

      • 不幸的是,它在我的示例中不起作用 - 我的参数始终为空。你能告诉我服务器端控制器操作的样子吗? (哪个参数?)
      • 它仍然不适合我(甚至你的示例代码)。项目始终为空或为空。我不知道我做错了什么。我正在使用 asp.net MVC 3。
      【解决方案4】:

      您是否尝试过使用Request.Forms 字典?

      public ActionResult MyAction(FormCollection formValues)
      {
      }
      

      遍历formValues

      【讨论】:

      • 是的,我试过了。但是当我有分层数据(我有)时,我发现它非常不方便。因为一切都将是一个平面列表。
      猜你喜欢
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多