Javascript 将字符串数组从ajax函数传递到mvc控制器
当在引导数据表中选择一行时,我建立了一个数组。然后我需要将这个从我的视图传递到控制器,控制器将启动一个局部视图。然而,当我执行代码时,我的控制器中出现空引用异常。控制器中的代码只是实际使用的占位符,但用于显示我打算在加载数组时循环数组。关于为什么它会显示NULL的任何想法,即使我可以在debug中看到它有值 阿贾克斯: 控制器:Javascript 将字符串数组从ajax函数传递到mvc控制器,javascript,c#,arrays,ajax,asp.net-mvc,Javascript,C#,Arrays,Ajax,Asp.net Mvc,当在引导数据表中选择一行时,我建立了一个数组。然后我需要将这个从我的视图传递到控制器,控制器将启动一个局部视图。然而,当我执行代码时,我的控制器中出现空引用异常。控制器中的代码只是实际使用的占位符,但用于显示我打算在加载数组时循环数组。关于为什么它会显示NULL的任何想法,即使我可以在debug中看到它有值 阿贾克斯: 控制器: public ActionResult MoveSelectedRoute(string[] orders) { string OrdersToMove = s
public ActionResult MoveSelectedRoute(string[] orders)
{
string OrdersToMove = string.Empty;
foreach (string row in orders)
{
string orderNo = orders.ToString().PadLeft(10, '0');
if (OrdersToMove == string.Empty)
{
OrdersToMove = orderNo;
}
else
OrdersToMove = OrdersToMove + "," + orderNo;
}
}
您必须使用
JSON.stringify({orders:completeArray})
,并且您的C#代码将映射数组及其参数。您必须使用JSON.stringify({orders:completeArray})
和您的C#code将映射您的数组及其参数。您需要添加traditional:true
ajax选项以将数组发回集合
$.ajax({
type: "Get",
url: '@Url.Action("MoveSelectedRoute", "Transport")',
data: { orders: completeArray },
traditional true,
success: function (data) {
....
}
})
注意traditional:true
选项仅适用于简单数组
另一种方法是对数据进行字符串化,将内容类型设置为application/json
,并进行POST而不是GET
$.ajax({
type: "Get",
url: '@Url.Action("MoveSelectedRoute", "Transport")',
data: JSON.stringify({ orders: completeArray }),
contentType: "application/json; charset=utf-8"
success: function (data) {
....
}
})
最后一种选择是使用集合索引器生成和发送值
var data = {
orders[0] = 'abc',
orders[1] = 'xyz',
orders[2] = '...'
}
$.ajax({
type: "Get",
url: '@Url.Action("MoveSelectedRoute", "Transport")',
data: data,
success: function (data) {
....
}
})
您需要添加
traditional:true
ajax选项以将数组发回集合
$.ajax({
type: "Get",
url: '@Url.Action("MoveSelectedRoute", "Transport")',
data: { orders: completeArray },
traditional true,
success: function (data) {
....
}
})
注意traditional:true
选项仅适用于简单数组
另一种方法是对数据进行字符串化,将内容类型设置为application/json
,并进行POST而不是GET
$.ajax({
type: "Get",
url: '@Url.Action("MoveSelectedRoute", "Transport")',
data: JSON.stringify({ orders: completeArray }),
contentType: "application/json; charset=utf-8"
success: function (data) {
....
}
})
最后一种选择是使用集合索引器生成和发送值
var data = {
orders[0] = 'abc',
orders[1] = 'xyz',
orders[2] = '...'
}
$.ajax({
type: "Get",
url: '@Url.Action("MoveSelectedRoute", "Transport")',
data: data,
success: function (data) {
....
}
})
当我添加stringify时,它仍然会在控制器上接收到一个null through,这是不幸的。您可以尝试用“List”替换“string[]”,还可以将这些属性添加到ajax调用中:contentType:“application/json;charset=utf-8”,dataType:“json”,我已经尝试过这些,但没有一个成功。当我添加stringify时,它仍然会在控制器上接收到一个空值。不幸的是,您可以尝试用“List”替换“string[]”,也可以将这些属性添加到ajax调用中:contentType:“application/json;charset=utf-8”,数据类型:“json”,我已经试过了,但没有一个奏效。不幸的是,你没有展示什么是
completeArray
!但是假设它是一个字符串数组,例如[“a”,“b”,“c']
,那么您需要添加traditional:true,
ajax选项;charset=utf-8',不幸的是,这些都不起作用,它只是一个字符串数组,我给你的两个选项都起作用了!Stephen我误读了你给出的选项,并将它们组合在一起。stringify不起作用,但是传统的:是的,起作用了。如果你回答这个问题,我会记下来。感谢您没有展示什么是completeArray
!但是假设它是一个字符串数组,例如[“a”,“b”,“c']
,那么您需要添加traditional:true,
ajax选项;charset=utf-8',不幸的是,这些都不起作用,它只是一个字符串数组,我给你的两个选项都起作用了!Stephen我误读了你给出的选项,并将它们组合在一起。stringify不起作用,但是传统的:是的,起作用了。如果你回答这个问题,我会记下来。谢谢