如何在没有 ajax 调用的情况下在 window.location 中传递一个数组

Posted

技术标签:

【中文标题】如何在没有 ajax 调用的情况下在 window.location 中传递一个数组【英文标题】:how can i pass an array in window.location without ajax call 【发布时间】:2018-05-31 11:04:43 【问题描述】:

我想在 ExportTo 方法中发送列表数组,但在 ExportTo 方法中学生参数获取空值。如果我使用 ajax 它将正常工作。但必须使用 window.locatoin 传递列表数组。

查看

            $(document).ready(function () 

            $("#SaveBtn").click(function () 

                var student = 

                    Name: "Tanzid",
                    Department: "CSE"

                ;
                var student1 = 

                    Name: "Yasir",
                    Department: "BBA"

                ;
                var list = [];

                list.push(student);
                list.push(student1);

               var url = '@Url.Action("ExportTo", "Students")';

               var a = JSON.stringify(list);

               window.location = url + '?' + a;
            );
        )

. 控制器

Public void ExportTo(List<Student> student)
    




    

【问题讨论】:

尝试在这里完成您的问题。 我想通过 windows.location 将数组列表从视图传递到控制器,但它发送空值。我已经发送了一个对象并获得了我用于 $.param 的值,我可以工作,但它不适用于列表。 为什么你不想使用ajax 我需要没有 ajax 调用的解决方案 您需要使用集合索引器发送查询字符串 - 例如...?[0].Name=someValue&amp;[0].Dept=someValue&amp;[1].Name=someValue&amp;....(假设该方法的参数是IEnumerable&lt;T&gt;,其中T 包含这些属性)。但是你到底为什么要这样做呢? - 除了丑陋的查询字符串,你可能会超过查询字符串限制并抛出异常。 【参考方案1】:

我已经在不使用 ajax 的情况下测试了您的问题的一些场景及其工作:

先评论你的代码,因为我没有它。

从索引视图:

@
    ViewBag.Title = "Index";

<script src="~/scripts/jquery-1.10.2.js"></script>
<h2>Index</h2>
<script>


     $(document).ready(function () 

    var person = [];
    person.push("Reign");//change like $("#idname").val();
    person.push("John");
    var listOfObjects = [];
    person.forEach(function (names) 
        var singleObj = 
        singleObj['name'] = names;
        singleObj['dept'] = 'IT Dept.';
        listOfObjects.push(singleObj);
    );

    var url = '@Url.Action("Sample", "Home")';

    window.location = url + '?id=' + JSON.stringify(listOfObjects);
)

HomeController:

 public ActionResult Sample()
    
       string getval = Request.QueryString["id"];
       string concat = @"""data"":" + getval + "";


        ValList vl = new javascriptSerializer().Deserialize<ValList>(concat);

        foreach (var item in vl.data)
        
            Console.WriteLine("dept: 0, name: 1", item.dept, item.name);
        

        return View();
    


    public class ValList
    

        public List<Values> data  get; set; 
    

    public class Values
    
        public string name  get; set; 
        public string dept  get; set; 
    

一切正常,这取决于您的项目代码:

        //var List = [];
        //var a = 
        //    Name: $("#").val(),
        //    Dept: $("#").val()
        //;
        //List.Push(a);

这就是我得到的一切..

已根据您的需要进行了测试。祝您好运

【讨论】:

首先完成您的阵列...在继续任何操作之前使用alert("your array string here")。因为我不知道你的数组是从哪里来的。 如果你想检查你的数组,你可以使用alert(JSON.stringify(List)); 值来自一个表。并在发送到控制器后添加到列表中 Json.stringify 仅用于 ajax 调用。我已经试过了,但没用 使用自定义模型或类然后创建一个列表,抱歉不知道你的想法是什么......

以上是关于如何在没有 ajax 调用的情况下在 window.location 中传递一个数组的主要内容,如果未能解决你的问题,请参考以下文章