MVC3 - 无法通过其他操作将int []传递给RedicrectToAction上的控制器操作

时间:2012-05-20 23:30:34

标签: asp.net-mvc-3

我在同一个控制器中有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?我究竟做错了什么?谢谢

3 个答案:

答案 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