2010-03-14 4 views
3

J'ai une vue dans laquelle l'utilisateur peut télécharger un fichier sur le serveur.Gestion des boutons 2 Soumettre des actions dans une seule vue/formulaire - ASP.NET MVC 2 RTM

Dans cette vue, j'ai également 2 boutons: un pour télécharger un fichier et d'autres pour télécharger le dernier fichier importé.

Dans mon contrôleur j'ai créé 2 méthodes d'action: Import et Export.

Comment puis-je gérer la redirection de chaque clic de bouton sur la méthode d'action appropriée dans mon contrôleur?

J'ai essayé Html.ActionLink:

<%= Html.ActionLink("Upload", "Import", "OracleFile")%> 
<%= Html.ActionLink("Download", "Export", "OracleFile")%> 

Html.ActionLink n'a pas fait l'affaire. Les liens d'action m'amenaient vers les bonnes méthodes d'Action mais ils généraient une requête GET. De cette façon Request.Files.Count = 0.

J'ai besoin d'une requête POST.

Note: la partie la plus intrigante est que le téléchargement fonctionnait et tout d'un coup il a cessé de fonctionner. J'ai vu que certaines personnes ont le même problème avec les tâches FileUpload dans lesquelles le fichier Request.Files est toujours vide. Je pense que c'est vide parce que vous avez besoin d'un message sur le serveur. N'est-ce pas?

+0

est le dans un formulaire? – CoffeeCode

+0

Oui,

Répondre

8

peut-être cela va donner u l'idée:

vue:

<form enctype="multipart/form-data" method="post" action="/Media/Upload/Photo"> 
    <input type="file" name="file" id="file" /> 
    <input type="submit" name= "submitImport" value="Upload" /> 
    <input type="submit" name = "submitExport" value="Download" /> 
</form> 

contrôleur :

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Action (FormCollection formCollection) 
     { 
      if (formCollection["submitImport"] != null) 
      { 
       return Import(formCollection); 
      } 
      if (formCollection["submitExport"] != null) 
      { 
       return Export(formCollection); 
      } 
     } 

le Export et Importer sont les réactions appropriées

+0

J'ai eu l'idée, mais formCollection est toujours vide. Lorsque je répète sa collection Key, il n'y a rien. –

+0

avez-vous ajouté les noms et les identifiants aux boutons d'envoi? J'ai également ajouté un attribut à l'action – CoffeeCode

+0

Oui, j'ai ajouté le nom et l'identifiant à chaque bouton de soumission. –

1

Pour générer une requête POST pour le téléchargement, utilisez l'élément de formulaire Fichier d'entrée et revenez au serveur en mode normal.

http://www.w3schools.com/jsref/dom_obj_fileupload.asp

Jetez un oeil à ce billet de blog de Scott Hanselman. http://www.hanselman.com/blog/ABackToBasicsCaseStudyImplementingHTTPFileUploadWithASPNETMVCIncludingTestsAndMocks.aspx

+0

J'ai déjà vu Scott Hanselman poster mais ça n'a pas aidé. –

+0

OK, pouvons-nous voir un peu plus de votre code alors? À quoi ressemble l'action du contrôleur? –

+0

Alastair, merci pour votre aide. La réponse CoffeeCode fournie a fait l'affaire. –

2

Vous devez utiliser un formulaire "multipart/form-data" et soumettre le formulaire. Pas de lien d'action.

<form enctype="multipart/form-data" method="post" action="/Media/Upload/Photo"> 
    <input type="file" name="file" id="file" /> 
    <input type="submit" value="Upload" /> 
</form> 
+0

J'ai enctype = "multipart/form-data" ensemble mais cela n'a pas aidé. –

+0

Vous ne pouvez pas utiliser ActionLink pour publier, il doit s'agir d'un bouton d'envoi. –

+0

Oui, j'ai appris cela aussi. Cela m'a motivé à poser cette question. –