使用JSON和JQuery向ASP.NET MVC控制器发布一个复杂对象数组

4

我知道之前已经提到过这个问题,例如在这里:

如何使用JSON、jQuery将复杂对象数组发布到ASP.NET MVC控制器?

但是这些解决方案似乎不适用于我的问题。

这是我的HTML代码。行数是可变的:

 <table id="workPlanTable">
    <tr>
        <th>
            Begin
        </th>
        <th>
            End
        </th>
    </tr>

    <tr itemId="1">
        <td><input class="begin" id="begin_1" name="begin_1" type="text" value="5:30" /></td>
        <td><input class="end" id="end_1" name="end_1" type="text" value="11:30" /></td>
    </tr>
    <tr itemId="3">
        <td><input class="begin" id="begin_3" name="begin_3" type="text" value="5:30" /></td>
        <td><input class="end" id="end_3" name="end_3" type="text" value="7:30" /></td>
    </tr>

</table>

JS构建对象数组并将其发送到控制方法:
<script type="text/javascript">
$(function() {

  submitForm = function() {
    var items = new Array();
    $("#workPlanTable tr").each(function(i) {
      var end = $(this).find(".end").val();
      var begin = $(this).find(".begin").val();
      var item = {
        "Begin": begin,
        "End": end
      };
      items.push(item);

    });
    var postData = {
      myItems: items
    };

    $.ajax({
      url: '~/WorkPlan/AjaxUpdate',
      type: 'POST',
      dataType: 'json',
      data: postData,
      contentType: 'application/json; charset=utf-8',
      success: function(result) {
        alert(result.Result);
      }
    });
  }
})
</script>

每一行代表一个WorkPlanItem。
我的目标是将它们全部发布到我的控制器以进行更新。
我似乎无法弄清楚如何在我的控制器方法(AjaxUpdate)中访问数组。
1个回答

7
你可以将表单序列化为Vikas发布的,或者如果你更喜欢遍历页面(就像你目前正在做的那样)并使用postData数组,可以使用stringifyfunction

在控制器上,您需要处理json字符串。您可以使用 System.Web.Script.Serialization.JavaScriptSerializer class 进行反序列化。如果您有一个映射到传递数据的对象,您可以使用 Deserialize 方法。如果没有,您仍然可以使用 DeserializeObject,但这会给您一个 Dictionary<string, string> 集合,您需要遍历以获取数据。不是非常容易(相信我),但它能起作用。


感谢您提供如此出色的答案。我最终使用了stringify函数+JavaScriptSerializer。 - Rasmus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接