2009-09-17 7 views
1

Dans le cas où l'utilisateur n'a pas activé Javascript, afin d'en tirer une forme, je commence ainsi:ASP.NET MVC Ajax Form: Est-ce que enctype est correct? Pourquoi les fichiers ne sont-ils pas téléchargés?

<% using (Html.BeginForm("Create", "Language", FormMethod.Post, 
    new {enctype="multipart/form-data"})) 
{ %> 

Si l'utilisateur a activé Javascript, le code suivant est utilisé:

<% using (Ajax.BeginForm("Create", "Language", 
    new AjaxOptions { UpdateTargetId = "CommonArea" }, 
    new { enctype = "multipart/form-data" })) 
{ %> 

le problème est le suivant:

dans le premier cas, je peux obtenir le fichier téléchargé en utilisant l'instruction suivante dans la couche d'affaires:

// Get the uploaded file 
HttpPostedFile Flag = HttpContext.Current.Request.Files["Flag"]; 

Dans le second cas, cette instruction ne fonctionne pas. Comment puis-je télécharger ce fichier en utilisant Ajax.BeginForm? Le code est-il correct? Quelqu'un de plus expérimenté peut-il vous conseiller sur l'utilisation du plug-in jQuery pour télécharger le fichier avant la soumission du formulaire?

Merci

Répondre

3

Vous ne pouvez pas faire un téléchargement de fichier en utilisant AJAX seul. De nombreux (plus?) Téléchargeurs asynchrones utilisent un iframe caché créé de manière dynamique contenant un formulaire qui est normalement renvoyé au serveur. Je suggère de regarder à travers le référentiel plugin jQuery pour "ajax upload" et de voir si vous pouvez trouver un plugin qui fonctionnera pour vous qui fera le téléchargement en utilisant une combinaison de javascript et un iframe.

REMARQUE: Actuellement, Firefox et Chrome prennent en charge XMLHttpRequest2, ce qui autorise le téléchargement via une requête AJAX. On peut s'attendre à ce que ce support devienne universel à un moment donné et un vrai téléchargement asynchrone sera possible dans tous les navigateurs. Les navigateurs prenant en charge FormData peuvent également télécharger des fichiers à l'aide de cette interface.

+0

Putain ... Merci pour avoir signalé ... Wasted 2 heures pour la recherche ... question –

1

Le plugin jQuery Form a une manière très très soignée et complètement transparente de le faire. Il transforme automatiquement le dans le iframe caché. Seulement ce que vous avez à faire est d'appeler .ajaxForm() sur votre formulaire pour initialiser le composant. Le seul problème est que si vous renvoyez json à partir de la méthode d'action, vous devez modifier le type de contenu, afin que votre fonction de rappel le reconnaisse comme un json.

Il est un peu bizarre, mais cela fonctionne pour moi:

JsonResult result = Json(response); 
result.ContentType = "text/html"; 
return result; 
Questions connexes