2012-07-11 15 views
15

Może to być prosta, ale tu idzie:Przekierowanie do MVC ActionResult od FileResult

mam realizacji raport pobrania programu Excel w mojej aplikacji MVC3. Używałem tej metody w przeszłości i działało idealnie, jednak w tym przypadku istnieje szansa, że ​​dane sprzedaży mogą nie istnieć dla raportu. Tu jest mój kodu:

Mam działania FileResult w kontrolerze raportów:

[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" 
     }; 
    } 

Mój problem jest to, że czasami strumień raport może być null oznacza, że ​​nie ma informacji sprzedaży dostępne, w tym przypadku chciałbym raczej przekieruj do widoku, który wyświetla komunikat informujący, że nie ma dostępnych informacji o sprzedaży, ale nie jestem pewien, jak to osiągnąć.

Czy istnieje sposób, aby to zrobić?

Odpowiedz

26

No FileResult dziedziczy z ActionResult:

Jeśli wynik może być zarówno RedirectToRouteResult (dziedziczenie z ActionResult) lub FileResult, potem ... twoje działanie musi być typu ActionResult, który może zarządzać zarówno.

coś takiego:

[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" 
      }; 
    } 
Powiązane problemy