RedirectToAction List< T>参数不会被正确转发给actionmethod

本文关键字:转发 actionmethod List 参数 RedirectToAction | 更新日期: 2023-09-27 18:05:01

我有一个动作方法(FileUpload),它处理上传的数据并将其转发给一个新的动作方法。处理后的数据应作为参数发送给其他动作方法。

public RedirectToRouteResult FileUpload(HttpPostedFileBase file)
{
    //datalist contains 3 elements
    List<Data> datalist = Import.ImportCSVFile(
                                   new StreamReader(file.InputStream)).ToList(); 
    return RedirectToAction("EditDataList",
                            new RouteValueDictionary(new { DataList = datalist, 
                                                           bla = "asfd" }));
}
public ViewResult EditDataList(List<Data> DataList=null,String bla="nothing set")
{
    if (DataList == null)
    {
        DataList = base.CreateViewModelContext().DataList.ToList();
    }
    return View(DataList);
}

当我在fileupload操作方法中连接到调试器时,数据列表包含3个元素。当我步进到EditDataList时,DataList参数被初始化并包含0个元素。参数bla被设置为asdf,这是正确的

有没有人知道为什么我不接收EditDataList动作方法中的数据?

RedirectToAction List< T>参数不会被正确转发给actionmethod

RedirectToAction不是对另一个动作的简单调用。事实上,它经历了一个完整的响应-请求周期。以下是来自MSDN的描述:

返回一个HTTP 302响应到浏览器,这导致浏览器向指定的操作发出GET请求。

这真的是我们想要的行为吗?如果是,您可能很难将这些文件发送给新操作,最好将它们保存在某个地方,并仅向其他操作发送id。如果没有,您应该像调用常规方法一样简单地调用另一个操作。这是一件非常好的事情。

return EditDataList(datalist, "asfd");