c# - 将字典传递给 Controller ​​ asp.net mvc

标签 c# javascript asp.net-mvc ajax dictionary

我想传递 <int,int> 类型的字典通过 Ajax 帖子发送到我的 Controller 。 这里的主要原因是这里的帖子可能有 1-3 个键值对(这些值在编译时都不知道),将来可能会增加到 5 个。

另外在帖子中我还必须传递一些其他数据,例如 Id 和 name,它们都可以正常工作。

我如何在 javascript 中构建这个字典然后通过 JQuery post 发送它并最终在 Controller 上接收它以进行处理?

编辑 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 });

然后您可以发布 dict使用 Dictionary<int, int> 反对你的 Controller 作为属性类型。

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); }); 

关于c# - 将字典传递给 Controller ​​ asp.net mvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999525/

相关文章:

c# - 需要绝对路径?

c# - HTML敏捷包: How to check if an element is visible?

c# - LINQ - 使用 Predicate<T> 调用过滤器

javascript - 从图表中的数据库中选择不更新值 php

javascript - 从 React Native 和 expo 调用本地域

javascript - d3.js 直方图不适用于每个箱的总频率数组

asp.net - 在 ASP.NET MVC 中访问服务器上的文件

asp.net-mvc - 构建 ASP.net MVC 应用程序以使用存储库和服务

c# - 使用 MVVM 在 wpf 选项卡中延迟加载大型数据集

asp.net-mvc - 在 MVC 上的 Application_BeginRequest 中重定向