mvc3 de téléchargement de fichiers à l'aide d'ajax formulaire de Demande.Les fichiers vides
Im à l'aide de mvc3, et suis en train de créer une série d'ajax formes que chaque téléchargement d'un fichier, sur une seule page. Voici la vue de la page:
@{
ViewBag.Title = "Index";
}
<h2>
Index</h2>
@Html.Partial("_UploadItem")
@Html.Partial("_UploadItem")
@Html.Partial("_UploadItem")
<script type="text/javascript">
function Go() {
//loop through form tags
for (var n = 0; n < document.forms.length; n++) {
var f = document.forms[n];
//if a dress is chosen, a caption is chosen
//and a file is chosen, then submit the ajax form
if (f.dressid.value != '' &&
f.dresscaption.value != '' &&
f.fileitem.value != '')
f.submit();
}
}
</script>
<input type="button" onclick="Go();"/>
Puis le Go() fonction boucle de l'ajax formes, de vérifier si tous les 3 morceaux (dressid, dresscaption, et fileitem) sur chaque formulaire sont non-vide, et les appels soumet les formulaires qui ne, coup d'envoi d'une async télécharger.
Voici la vue partielle:
@using SoRefeising.Models
@using (Ajax.BeginForm("UploadFile", new { }, new AjaxOptions { HttpMethod = "POST" }, new { enctype="multipart/form-data"}))
{
List<SelectListItem> items = (List<SelectListItem>)ViewBag.Dresses;
<span>Dress</span>
@Html.DropDownList("dressid", items, "Choose Dress");
<span>Caption</span>
@Html.TextBox("dresscaption")
<input type="file" id="fileitem" />
}
J'ai marqué chaque forme avec l'attribut multipart. Lorsque la page est générée, je reçois le texte suivant:
<form action="/upload/UploadFile" data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data" id="form0" method="post"> <span>Dress</span>
<select id="dressid" name="dressid"><option value="">Choose Dress</option>
<option value="1">Simpson01</option>
<option value="2">Simpson02</option>
</select> <span>Caption</span>
<input id="dresscaption" name="dresscaption" type="text" value="" /> <input type="file" id="fileitem" />
</form>
<form action="/upload/UploadFile" data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data" id="form1" method="post"> <span>Dress</span>
<select id="dressid" name="dressid"><option value="">Choose Dress</option>
<option value="1">Simpson01</option>
<option value="2">Simpson02</option>
</select> <span>Caption</span>
<input id="dresscaption" name="dresscaption" type="text" value="" /> <input type="file" id="fileitem" />
</form>
<form action="/upload/UploadFile" data-ajax="true" data-ajax-method="POST" enctype="multipart/form-data" id="form2" method="post"> <span>Dress</span>
<select id="dressid" name="dressid"><option value="">Choose Dress</option>
<option value="1">Simpson01</option>
<option value="2">Simpson02</option>
</select> <span>Caption</span>
<input id="dresscaption" name="dresscaption" type="text" value="" /> <input type="file" id="fileitem" />
</form>
Tout semble ok...
Voici le contrôleur de l'action qui est appelée
[HttpPost]
public ActionResult UploadFile(string dressid, string dresscaption)
{
HttpPostedFileBase hpf = Request.Files[0] as HttpPostedFileBase;
...
Lorsque l'action est appelée, à la Demande.Les fichiers de la collection a 0 articles, plutôt que le fichier sélectionné. Je l'ai activé javascript discret, le discret fichier est chargé dans la page principale, et travaille sur d'autres pages.
J'ai vu quelques messages sur le forum à propos d'être prudent avec les tailles de fichier. Le fichier que je suis en train de tester avec < 2k
Des idées pourquoi il n'y a pas d'éléments dans la Requête.Fichiers?
Grâce
OriginalL'auteur Rick Hodder | 2011-12-14
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas télécharger des fichiers à l'aide d'AJAX. Remplacez donc le
Ajax.BeginForm
normale avec uneHtml.BeginForm
. Vous pouvez commander la blog suivant.Si vous souhaitez utiliser asynchrone téléchargements, vous pouvez essayer certains des composants de téléchargement comme Ajax Upload et Uploadify.
OriginalL'auteur Darin Dimitrov
Tout d'abord, je ne suis pas sûr de savoir pourquoi vous avez ce à trois reprises.
Vous essayez de télécharger plusieurs fichiers? Il existe assez peu de scripts qui vous permettent de le faire assez efficacement. Vous êtes également à la production de plusieurs formulaires avec des champs qui contiennent le même id. Cette habitude effet le processus de téléchargement, mais est une mauvaise pratique. Je ne pense que vous avez besoin de refactoriser le ci-dessus. De toute façon changer le champ dans votre vue partielle de
Je pense que le problème peut être avec votre réelle de l'action et de la façon dont vous essayez de récupérer le fichier. Essayez cette
Laissez-moi savoir si cela fonctionne.
OriginalL'auteur TYRONEMICHAEL