2016-06-20 2 views
2

Dans MVC, existe-t-il un moyen de renvoyer un FileStreamResult si ma requête aboutit, mais si ce n'est pas le cas, retournez simplement la View avec une erreur dans ViewBag. Comme si ....Renvoyer un FileStreamResult en cas de succès ou Afficher en cas d'échec

public FileStreamResult Submit() 
    { 
     string retVal; 
     try 
     { 
      DataSet ds = new DataSet(); 

      ds = getDS(); 
      if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) 
      { 
       ExcelXmlWorkbook book = ExcelXmlWorkbook.DataSetToWorkbook(ds); 
       string fileName = "results.xml"; 
       book.Export(fileName, ExportFormat.Xml, 0); 
       FileInfo info = new FileInfo(fileName); 
       return File(info.OpenRead(), "application/x-msexcel"); 
      } 
      else 
      { 
       retVal = "No Data"; 
      } 

     } 
     catch (Exception ex) 
     { 
      retVal = ex.Message; 
     } 

     ViewBag.Result = retVal; 

     return View("ViewName"); 
    } 

Je sais que cela ne fonctionne pas, mais au fond, je veux ouvrir un fichier de résultats si la traction de données a réussi ... si ce n'était pas, je veux afficher la ou rediriger vers une autre page pour montrer à l'utilisateur que les résultats ont échoué. Toute suggestion sur une meilleure façon est également la bienvenue. Merci!

Répondre

4

Les deux ViewResult (ce qui est le type retourné par la méthode View) et FileStreamResult dérivent de la classe ActionResult, ce qui représente le résultat d'une méthode d'action, de sorte que vous devez retourner son instance de Submit.

public ActionResult Submit() 
+0

@Dom Merci de nous le signaler. J'ai modifié mon message. En fait, j'ai fait une erreur, parce que j'ai écrit que 'View' dérive de' ActionResult', mais 'View' est une méthode, bien sûr :-) – Kapol

+0

Merci pour la réponse rapide! Ceci est exactement ce que je cherchais. J'ai été victime de "la réponse est si simple ce n'est pas" ... Merci encore! – Zach

+0

@Zach Je suis heureux d'avoir aidé, acclamations. – Kapol