将上传的图像传递给另一个未显示的控制器

时间:2016-09-10 19:19:16

标签: asp.net-mvc asp.net-mvc-4

我有一张带有一张图片上传和一张提交按钮的表单。

当我按下提交按钮时,我可以在我的控制器中读取上传的图像信息(见图1)

问题是,当我从此控制器将上传的图像信息传递给另一个控制器时,请参阅图像2

"另一个" controller没有获取图像信息,其HttpPostedFileBase为null / 0

为什么会这样做,我该怎么办?

[HttpPost]
[UserAuthorize(Roles = "User")]
[ValidateAntiForgeryToken]
public ActionResult NewProject(NewUserProjectViewModel model)
{
        return RedirectToAction("previewProject", model);
}


[UserAuthorize(Roles = "User")]
public ActionResult previewProject(NewUserProjectViewModel model)
{
    return View(model);
}   

IMAGE 1 IMAGE 2

1 个答案:

答案 0 :(得分:0)

RedirectToAction实际上向浏览器发送302响应,新url作为位置标头值,浏览器将读取此响应并向新URL发出全新的GET请求。您无法使用RedirectToAction传递复杂模型。

你有几个选择

  1. 您可以直接从PreviewProject操作方法调用NewProject视图并传递该对象。

    public ActionResult NewProject(NewUserProjectViewModel model)
    {
       return View("previewProject", model);
    }
    
  2. 发送RedirectResult响应时,您可以保留模型数据并将唯一ID传递给下一个操作方法。在第二个操作方法中,使用此唯一ID的参数,然后使用该参数再次获取数据并使用该参数。

    public ActionResult NewProject(NewUserProjectViewModel model)
    {
       var id = SaveModelAndReturnUniqueID(model);
       return RedirectToAction("previewProject", new {id=id});
    }
    public ActionResult previewProject(int id)
    {
       NewUserProjectViewModel model= GetNewUserProjectViewModel(id);
       return View(model);
    }
    
  3. 使用Session或TempData等临时持久性机制。
  4. 查看How do I include a model with a RedirectToAction?