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

Posted

技术标签:

【中文标题】如何通过ajax jquery将列表字符串从视图传递到控制器【英文标题】:how to pass list string from view to controller by ajax jquery 【发布时间】:2015-01-11 21:45:22 【问题描述】:

这是我的html

<ul class="sb_dropdown" style="display:none;">
                    <li class="sb_filter">Chon the loai</li>
                    <li><input type="checkbox" value="All"/><label for="all"><strong>Tất cả</strong></label></li>
                    <li><input type="checkbox" value="Woman"/><label for="Automotive">Đồ nữ</label></li>
                    <li><input type="checkbox" value="Shoes"/><label for="Baby">Giày</label></li>
                    <li><input type="checkbox" value="Bag"/><label for="Beauty">Túi sách</label></li>
                    <li><input type="checkbox" value="Man"/><label for="Books">Đồ nam</label></li>                      
                </ul>

这是我调用控件的ajax,

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

                        );
                    </script>

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

public ActionResult Result()
    
        return View();
    
    [HttpPost]
    public ActionResult Result(List<string> listkey)
    
        var n = listkey;
        return View();
    

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

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

【问题讨论】:

为什么要将 html 传递给action result?相反,您只能传递 selected/un-selected 的值。 我不想将我的 html 传递给操作结果,我想传递选中的复选框的列表值,并且我想在搜索控制器中打开结果视图 【参考方案1】:

编辑试试这个,创建数组并将它传递给你的控制器

    var stringArray = new Array();
    stringArray[0] = "item1";
    stringArray[1] = "item2";
    stringArray[2] = "item3";
    var postData =  listkey: stringArray ;

比你的数据在你的ajax调用中

   data: postData 


$.ajax(
        type: "POST",
        url: '@Url.Action("Search", "Result")',
        data: postData,
        success: function(data)
            alert(data.Result);
        ,
        dataType: "json",
        traditional: true
    );

你可以这样做,

    将您的列表转换为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");
                                
                            );

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

  [HttpPost]
        public ActionResult Result(List<string> listkey)
        
            var n = listkey;
            return View();
        

【讨论】:

调试时它没有将参数列表键传递给我的控制器,我认为当我使用 ajax 调用操作并将参数传递给它时我是正确的。我没有看到此代码有任何错误跨度> 你能帮帮我吗 嗨 prana,我试试这个,但它不起作用。所以我在布局页面中这样做,我试图轻松地将参数更改为 int id,然后我将它的值传递为 1,它警报失败 @CongLe - 如果可以帮助您解决问题,请接受答案【参考方案2】:
<script>
 $('.sb_search').click(function () 
    var list = [];
    $('ul.sb_dropdown').find("input:checkbox:checked").each(function () 
    list.push($(this).val());
    );

    $.ajax(
        url: '@Url.Action("Search", "Result")',
        data:  listkey: list ,
        dataType: "json",
        type: 'POST',
        traditional: true,
        success: function (data) 
            alert("success");
        ,
        error: function () 
            alert("fail");
        
    );
);
 </script>



       [HttpPost]
       public ActionResult Result(List<string> listkey)
       
           var n = listkey;
           return View();
       

【讨论】:

以上是关于如何通过ajax jquery将列表字符串从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章

Django - 如何正确地将列表从模板发送到 AJAX 以查看?

如何从MVC5中的jquery ajax调用中获取部分视图和JSON数据?

JQuery将'空参数传递给MVC控制器方法

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

如何从 jQuery ajax 调用将复杂对象传递给 ASP.NET WebApi GET?

jQuery ajax如何传多个值到后台页面,举例: