我知道在
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>
每行代表一个WorkPlanItem.我的目标是将它们全部发布到我的控制器以更新它们.
解决方法
您可以将表单序列化为
Vikas posted,或者如果您更喜欢浏览页面(正如您当前所做的那样)并使用postData数组,则可以使用stringify
function.
在控制器上,您将需要处理json字符串.您可以使用System.Web.Script.Serialization.JavaScriptSerializer class对其进行反序列化.如果您有一个映射到您传递的数据的对象,则可以使用Deserialize方法.如果你不这样做,你仍然可以使用DeserializeObject,但是它会给你一个字典< string,string>您必须走过才能获取数据的集合.不完全有趣(相信我),但它的确有效.