如何通过ajax jquery将列表字符串从视图传递到控制器

Con*_* Le 4 asp.net-mvc jquery asp.net-ajax

这是我的html

\n\n
<ul class="sb_dropdown" style="display:none;">\n                    <li class="sb_filter">Chon the loai</li>\n                    <li><input type="checkbox" value="All"/><label for="all"><strong>T\xe1\xba\xa5t c\xe1\xba\xa3</strong></label></li>\n                    <li><input type="checkbox" value="Woman"/><label for="Automotive">\xc4\x90\xe1\xbb\x93 n\xe1\xbb\xaf</label></li>\n                    <li><input type="checkbox" value="Shoes"/><label for="Baby">Gi\xc3\xa0y</label></li>\n                    <li><input type="checkbox" value="Bag"/><label for="Beauty">T\xc3\xbai s\xc3\xa1ch</label></li>\n                    <li><input type="checkbox" value="Man"/><label for="Books">\xc4\x90\xe1\xbb\x93 nam</label></li>                      \n                </ul>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的ajax调用控件,

\n\n
 <script>\n                        $(\'.sb_search\').click(function () {\n                            var list = [];\n                            $(\'ul.sb_dropdown\').find("input:checkbox:checked").each(function () {\n                                list.push($(this).val());\n                            });\n                            var key = { listkey: list };\n                            $.ajax({\n                                url: \'@Url.Action("Search", "Result")\',\n                                traditional: true,\n                                data: list,\n                                dataType: "html",\n                                type: \'POST\',\n                                success: function (data) {\n                                    alert("success");\n                                },\n                                error: function () {\n                                    alert("fail");\n                                }\n                            });\n\n                        });\n                    </script>\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的控制器中,我有一个参数列表键,我希望当我单击按钮搜索时能从视图中收到该参数列表键

\n\n
public ActionResult Result()\n    {\n        return View();\n    }\n    [HttpPost]\n    public ActionResult Result(List<string> listkey)\n    {\n        var n = listkey;\n        return View();\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我调试这不是执行操作结果时,它会警告失败。告诉我我做错了什么。请帮助我了解 returnjson 为什么我需要使用而不是我想使用普通视图来显示我的结果

\n\n

我已经解决了这个问题,因为我在ajax中放置了错误的操作和控制器。谢谢大家

\n

Pra*_*ana 6

编辑尝试这个,创建数组并将其传递给您的控制器

    var stringArray = new Array();
    stringArray[0] = "item1";
    stringArray[1] = "item2";
    stringArray[2] = "item3";
    var postData = { listkey: stringArray };
Run Code Online (Sandbox Code Playgroud)

比你的ajax调用中的数据要多

   data: postData 


$.ajax({
        type: "POST",
        url: '@Url.Action("Search", "Result")',
        data: postData,
        success: function(data){
            alert(data.Result);
        },
        dataType: "json",
        traditional: true
    });
Run Code Online (Sandbox Code Playgroud)

你可以这样做,

  1. 将列表转换为 json 字符串,如下所示

你的数据将是 data: '{ "listkey":' + JSON.stringify(list) + '}',

$.ajax({
                                url: '@Url.Action("Search", "Result")',
                                traditional: true,
                                 data: '{ "listkey":' + JSON.stringify(list) + '}',
                                dataType: "html",
                                type: 'POST',
                                success: function (data) {
                                    alert("success");
                                },
                                error: function () {
                                    alert("fail");
                                }
                            });
Run Code Online (Sandbox Code Playgroud)

而不是尝试看看你是否得到了你想要的结果

  [HttpPost]
        public ActionResult Result(List<string> listkey)
        {
            var n = listkey;
            return View();
        }
Run Code Online (Sandbox Code Playgroud)