如何在没有 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&[0].Dept=someValue&[1].Name=someValue&....
(假设该方法的参数是IEnumerable<T>
,其中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 中传递一个数组的主要内容,如果未能解决你的问题,请参考以下文章