我想传递类型为< int,int>的字典通过Ajax发布到我的控制器.
这里的主要原因是这里的帖子可能有1-3个关键值对(在编译时没有这些值被知道),以后它可能会达到5.
这里的主要原因是这里的帖子可能有1-3个关键值对(在编译时没有这些值被知道),以后它可能会达到5.
同样在帖子中,我必须传递一些其他数据,如Id和name,它们都正常工作.
我将如何在javascript中构建这个字典,然后通过JQuery发送它,最后在控制器上接收它来处理?
编辑2:
我决定用每个值的一个帖子来解决这个问题,而不是试图传递一个字典.
编辑:
这是我的功能来源,所以你可以看到我在做什么:
function BindAddMenuItem() { $(".AddMenuItem").click(function (e) { e.preventDefault(); //get header id from link by removing addmenuitem from this.id var currentId = $(this).attr("id").replace("AddMenuItem",""); //get itemnumber,itemname,itemdetails from textBoxes with same header id var restaurantId = jQuery.trim($("#RestaurantId").val()); var itemNumber = jQuery.trim($("#ItemNumber" + currentId).val()); var itemName = jQuery.trim($("#ItemName" + currentId).val()); var itemDetails = jQuery.trim($("#ItemDetails" + currentId).val()); var costs = new Object(); //select all textBoxes with class "Header" + currentId $(".Header" + currentId).each(function (i) { var optionId = $(this).attr("id").replace("Option",""); costs[optionId] = $(this).val(); }); $.ajax( { type: "POST",url: "/Menu/AddMenuItem",data: "reastaurantId=" + restaurantId + "&menuHeaderId=" + currentId + "&itemNumber=" + itemNumber + "&itemName=" + itemName + "&itemDetails=" + itemDetails + "&costs=" + costs,dataType: "html",success: function (result) { var domElement = $(result); $("#MenuContainer").replaceWith(domElement); var newNum = parseInt(itemNumber) + 1; $("#ItemNumber" + currentId).val(newNum); BindAllBehavIoUrs(); } }); }); }
解决方法
像(javascript)
dict = new Object(); dict['12'] = 5; dict['13'] = 6; dict['1000'] = 21; dict['9'] = 13; dict['13'] = 48; $.post('/client.mvc/mypostaction/',{ myDictionary: dict });
然后,您可以使用Dictionary< int,int>将dict对象发布到控制器.作为属性类型.
ActionResult MyPostAction(Dictionary<string,int> myDictionary)
第二次编辑作者的代码:
以下内容适用于我,当有一个Dictionary< string,int> kvPairs. < int,int>毕竟不会上班.
让你的帖子像:
var dict = new Object(); dict['13'] = 9; dict['14'] = 10; dict['2'] = 5; $.post('controller.mvc/Test',{ 'kvPairs': dict },function(obj) { $('#output').html(obj.Count); });