Reliure HttpPostedFileBase en utilisant Ajax.BeginForm
-
21-09-2019 - |
Question
I ai une forme qui se lie à un modèle et un téléchargement de fichier à l'aide du liant par défaut pour HttpPostedFileBase.
Cela fonctionne bien lors de l'utilisation Html.BeginForm (). Cependant, je voulais effectuer la même action en utilisant AJAX donc je remplacé cela avec Ajax.BeginForm () en modifiant les paramètres en conséquence.
Le modèle se fixe correctement, mais je ne peux toujours pas obtenir le téléchargement de fichiers à se lier au HttpPostedFileBase.
lie le modèle et le téléchargement de fichiers:
<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>
Ce ne lie que le modèle:
<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>
L'action du contrôleur:
public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)
Si cela est possible, et si oui, qu'est-ce que je fais mal? Merci.
La solution
Vous ne pouvez pas télécharger des fichiers avec AJAX. Une façon d'y parvenir est d'utiliser une iframe cachée qui simule un appel AJAX et effectuer le téléchargement de fichiers réel ou utiliser Flash. Voici une très belle plugin jQuery formulaire à l'aide d'un iframe caché qui est capable de manière transparente ajaxifying une soumission d'un formulaire contenant des champs de fichiers.
Autres conseils
Il est possible, la réponse est ici:
https://stackoverflow.com/a/13522052/1067149
Je l'ai fait moi-même et il est garanti qu'il fonctionne.
ADD id="file"
dans l'entrée de votre balise
DANS VOTRE PARAMETER ActionResult HttpPostedFileBase nom « fichier » et vue nom de la balise doit être identique
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(tbl_products tbl_products,HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
tbl_products.phototype = file.ContentType;
tbl_products.photo =new byte[file.ContentLength ];
file.InputStream.Read(tbl_products.photo,0, file.ContentLength);
if(obj.insert(tbl_products))
{
return RedirectToAction("Index");
}
else
{
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
}
}
return View(tbl_products);
}
Il fonctionne pour moi
Oui je suis d'accord aussi. Vous pouvez certainement télécharger des fichiers en utilisant « Ajax.BeginForm'.Add 'enctype = "multipart / form-data"' à l'objet AjaxOptions.