Передача информации другому действию с помощью RedirectToAction - MVC - PullRequest
1 голос
/ 22 апреля 2011

У меня есть это действие:

    public ActionResult Report(AdminReportRequest reportRequest, FormCollection formVariables)
    {
        AdminEngine re = new AdminEngine();

        AdminReport report = re.GetCompleteAdminReport(reportRequest);

        return View(report);
    }

Мне было интересно, как можно перейти к перенаправлению на другое действие в том же контроллере, передав переменные AdminReportRequest и FormCollection?

Я имел в виду нечто подобное:

    public ActionResult EarningsSalesReport(AdminReportRequest reportRequest, FormCollection formVariables)
    {
        if (!reportRequest.Download)
        {
            AdminEngine re = new AdminEngine();

            AdminReport report = re.GetCompleteAdminReport(reportRequest);

            return View(report);
        }

        return RedirectToAction("ExcelSalesReport", reportRequest, formVariables);

    }

    public FileResult ExcelSalesReport(AdminReportRequest reportRequest, FormCollection formVariables)
    {
        AdminEngine re = new AdminEngine();

        Stream SalesReport = re.GetExcelAdminReport(reportRequest);

        return new FileStreamResult(SalesReport, "application/ms-excel")
        {
            FileDownloadName = "SalesReport" + DateTime.Now.ToString("MMMM d, yyy") + ".xls"
        }; 
    }

Это явно не так и выдает некоторые ошибки, такие как:

System.Web.Mvc.Controller.RedirectToAction (строка, строка, System.Web.Routing.RouteValueDictionary)» имеет недопустимые аргументы

и

Аргумент 3: невозможно преобразовать из 'System.Web.Mvc.FormCollection' для 'System.Web.Routing.RouteValueDictionary'

Если бы кто-то мог указать мне правильное направление, я был бы очень благодарен, я думаю, что мне, возможно, придется редактировать файл Global.asax, однако я не слишком знаком с этим.

спасибо.

1 Ответ

4 голосов
/ 22 апреля 2011

Вы можете использовать объект TempData .

Значение свойства TempData хранится в состоянии сеанса. Любой метод действия, вызываемый после установки значения TempDataDictionary, может получить значения из объекта, а затем обработать или отобразить их. Значение TempData сохраняется до тех пор, пока оно не будет прочитано или пока не истечет время ожидания сеанса.

В этой статье MSDN все объясняется.

public ActionResult EarningsSalesReport(AdminReportRequest reportRequest, FormCollection formVariables)
{
   //...
   TempData["Report"] = reportRequest;  //store to TempData
   //...
}

public FileResult ExcelSalesReport(AdminReportRequest reportRequest, FormCollection formVariables)
{
  //...
  var report = TempData["Report"] as AdminReportRequest;
  //...
}
...