代码之家  ›  专栏  ›  技术社区  ›  Rasmus

使用json、jquery将复杂对象数组发布到ASP.NET MVC控制器

  •  4
  • Rasmus  · 技术社区  · 16 年前

    我知道这个问题以前就有人讨论过。 here

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

    这是我的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>
    

    每一行表示一个工作计划项。我的目标是将它们全部发布到我的控制器以更新它们。

    在我的控制器方法(AjaxUpdate)中,我似乎无法确定如何访问数组。

    1 回复  |  直到 16 年前
        1
  •  7
  •   Community CDub    8 年前

    可以将窗体序列化为 Vikas posted 或者您可以使用 stringify function 如果您希望浏览页面(如当前所做的),并使用 postData 数组。

    在控制器上,您需要处理JSON字符串。你可以使用 System.Web.Script.Serialization.JavaScriptSerializer class 反序列化它。如果有一个对象映射到要传递的数据,则可以使用 Deserialize 方法。如果你不这样做,你仍然可以使用 DeserializeObject 但是这给了你一个 Dictionary<string, string> 收集数据时,您必须仔细查看这些数据。不完全有趣(相信我),但它起作用。