我在同一个控制器中有2个动作。
public ActionResult Index(string filter, int[] checkedRecords)
和
public ActionResult ExportChkedCSV(string filter, int[] checkedRecords)
第二个Action(ExportChkedCSV)包含此重定向:
if (reject != 0)
{
return RedirectToAction("Index", new { filter, checkedRecords });
}
当我单步执行时,参数checkedRecords在RedirectToAction语句中正确填充,但是当它从那里命中Index ActionResult时,checkedRecords为null。我已经尝试过filter =,checkedRecords =等等。我从View到Controller都没有问题。如果我将数组类型更改为其他任何内容,我可以获取值 - 如何将int []从操作传递给action?我究竟做错了什么?谢谢
答案 0 :(得分:6)
您无法在MVC中将复杂类型作为重定向参数发送,只能使用数字和字符串等原始类型
使用TempData传递数组
...
if (reject != 0) {
TempData["CheckedRecords"] = yourArray;
return RedirectToAction("Index", new { filter = filterValue });
}
...
public ActionResult Index(string filter) {
int[] newArrayVariable;
if(TempData["CheckedRecords"] != null) {
newArrayVariable = (int[])TempData["CheckedRecords"];
}
//rest of your code here
}
答案 1 :(得分:1)
您正在发送两个空值。当您使用new {}时,您正在创建一个新对象。您不仅要定义索引名称,还要定义值。
return RedirectToAction("Index", new { filter = filter, checkedRecords = checkedRecords });
答案 2 :(得分:1)
我不确定ASP.Net是否知道如何使用您传递的int数组构建URL。如果int数组唯一标识资源,那么您可以尝试将数组转换为连字符分隔(或类似)字符串,然后在Index方法中解析字符串。
如果您只是尝试在请求之间保留数据,请使用TempData:
http://msdn.microsoft.com/en-us/library/system.web.mvc.controllerbase.tempdata.aspx