2009-12-15 10 views
0

Je n'ai pas une situation idéale où les fichiers téléchargés sont stockés sur un partage réseau interne. Donc, dans la base de données, je stocke le chemin vers l'emplacement où le fichier a été enregistré, mais il est tout à fait possible que le fichier soit supprimé de la synchronisation de la base de données. Ainsi, dans une action du contrôleur, je recherche les informations de téléchargement et vérifie que les choses sont correctes. Il peut se résumer comme quelque chose comme ceci:Comment gérer différents ActionResults pour un contrôleur ASP.NET MVC Action

public ActionResult GetUploadedFile(int uploadId){ 
    var uploadedFile = Repository<Upload>.FirstOrDefault(upload => upload.ID == uploadID); 
    if(uploadedFile == default(Upload)){ 
     return View("InvalidUpload"); 
    } 
    if(File.Exists(uploadFile.Path)){ 
     var fileInfo = new FileInfo(uploadFile.Path); 
     var contentType = HttpContext.GetMimeTypeForFileInfo(fileInfo) // my lookup extension method 
     return File(uploadFile.Path, contentType, uploadFile.Name); 
    } 
    return View("InvalidUpload"); 
} 

Le problème est que cette action est actuellement accessible via un lien sur une vue qui est chargé par AJAX. Ainsi, lorsque le fichier existe et que tout est OK, il affiche le dialogue standard "Que voulez-vous faire avec ce fichier" dans le navigateur et conserve le contenu visible à l'utilisateur. Le problème est les autres chemins à travers le code. Renvoyer la vue amène l'utilisateur à une URL complètement nouvelle. Et puis en cliquant en arrière va se réinitialiser où ils étaient (c'est fondamentalement jQuery Tabs, donc rien d'énorme, mais toujours un inconvénient majeur). Donc, je cherche comment d'autres ont pu s'attaquer à cette situation, car il ne semble pas être rare. Ou même quelques commentaires pour rendre cela un peu plus convivial. Je n'ai pas à dire où le fichier est stocké, donc changer ce n'est pas une option.

+0

Voulez-vous prendre l'utilisateur à l'onglet JQuery correcte? –

+0

En fait, je préfère ne pas m'éloigner de l'emplacement actuel, mais les ramener à la bonne position serait également bénéfique. Gardez à l'esprit que l'onglet sur lequel ils sont le plus susceptibles d'être est une URL complète, pas un # à un ID. Donc jQuery Tabs lui donne un hash unique. –

Répondre

-1

Il existe différents types de résultat d'action que vous pouvez utiliser.

Habituellement, lorsque j'ai une méthode de contrôleur qui génère quelque chose d'autre qu'une vue, j'utilise une action ContentResult.

public ContentResult GetUploadedFile(int uploadId){ 

Certains types de résultats sont les suivants:

  1. ViewResult - Représente HTML et le balisage.
  2. EmptyResult - Représente aucun résultat. RedirectResult - Représente une redirection vers une nouvelle URL.
  3. JsonResult - Représente un résultat de notation d'objet JavaScript pouvant être utilisé dans une application AJAX.
  4. JavaScriptResult - Représente un script JavaScript.
  5. ContentResult - Représente un résultat de texte.
  6. FileContentResult - Représente un fichier téléchargeable (avec le contenu binaire). FilePathResult - Représente un fichier téléchargeable (avec un chemin).
  7. FileStreamResult - Représente un fichier téléchargeable (avec un flux de fichier).

List taken from here

+0

si vous regardez ce que j'ai dans la question, je retourne des résultats différents. Ce n'est pas le problème. C'est comment le gérer sur le front-end pour une meilleure expérience utilisateur. –