但是解决方案似乎不适合我的问题。
这是我的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)中访问数组。
您可以按Vikas发布的方式对表格进行序列化,或者,如果您希望遍历页面(如当前操作)并使用数组,可以使用stringify函数postData。
stringify
postData
在控制器上,您需要处理json字符串。您可以使用System.Web.Script.Serialization.JavaScriptSerializer 该类来反序列化它。如果您有一个对象映射到您要传递的数据,则可以使用Deserialize方法。否则,您仍然可以使用DeserializeObject,但这将为您提供一个Dictionary<string, string>收集数据的集合。并不是很有趣(请相信我),但是它可以工作。
System.Web.Script.Serialization.JavaScriptSerializer
Dictionary<string, string>