Перенаправление на MVC ActionResult из FileResult

Это может быть просто, но здесь:

Я использую excel загружаемый отчет в моем приложении MVC3. Я использовал этот метод в прошлом, и он работал отлично, однако в этом случае существует вероятность того, что данные о продажах могут не существовать для отчета. Вот мой код:

У меня есть действие FileResult в контроллере отчетов:

    [HttpPost]
    public FileResult ExcelReportDownload(ReportExcelDownloadRequest reportRequest)
    {
        ReportEngine re = new ReportEngine();

        Stream report = re.GetReport(reportRequest);

        return new FileStreamResult(report, "application/ms-excel")
        {
            FileDownloadName = "SalesReport.xls"
        };
    }

Моя проблема заключается в том, что иногда поток отчетов может быть нулевым, что нет никакой информации о продажах, и в этом случае я предпочел бы перенаправить на представление, которое отображает сообщение, чтобы сообщить, что информации о продажах нет, однако я не уверен как добиться этого.

Есть ли способ сделать это?

Ответы

Ответ 1

Ну, FileResult наследует от ActionResult:

Если результат может быть либо RedirectToRouteResult (наследующий от ActionResult), либо FileResult, тогда... ваше действие должно иметь тип ActionResult, который может управлять обоими.

что-то вроде этого:

    [HttpPost]
    public ActionResult ExcelReportDownload(ReportExcelDownloadRequest reportRequest)
    {
        ReportEngine re = new ReportEngine();

        Stream report = re.GetReport(reportRequest);
        if (report == null)
           return RedirectToAction(<action Name>);
        else
           return new FileStreamResult(report, "application/ms-excel")
           {
               FileDownloadName = "SalesReport.xls"
           };
    }