Die Bindung HttpPostedFileBase Ajax.BeginForm mit
-
21-09-2019 - |
Frage
Ich habe eine Form, die für HttpPostedFileBase ein Modell und eine Datei-Upload mit dem Standardbinder bindet.
Dies funktioniert gut bei der Verwendung von Html.BeginForm (). Allerdings wollte ich die gleiche Aktion mit AJAX ausführen, damit ich diese mit Ajax.BeginForm ersetzt () die Parameter entsprechend zu ändern.
Das Modell bindet nach wie vor richtig, aber ich kann nicht die Datei-Upload auf die HttpPostedFileBase zu binden erhalten.
Dies bindet das Modell und die Datei-Upload:
<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>
Dieses bindet nur das Modell:
<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>
Die Controller Aktion:
public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)
Sollte dies möglich sein, und wenn ja, was mache ich falsch? Danke.
Lösung
Sie können keine Dateien hochladen mit AJAX. Eine Möglichkeit, dies zu erreichen, ist ein verstecktes iframe zu verwenden, die einen AJAX-Aufruf simuliert und führen den eigentlichen Datei-Upload oder Flash verwenden. Hier ist eine sehr schöne jQuery Plugin ein verstecktes iframe, die transparent fähig ist ajaxifying a Formular-Vorlage enthält Dateifelder.
Andere Tipps
Es ist möglich, die Antwort ist hier:
https://stackoverflow.com/a/13522052/1067149
Ich habe es selbst und es ist garantiert es funktioniert.
ADD id="file"
in Ihrem Tag Eingang
IHRE Action PARAMETER HttpPostedFileBase 'Datei' Name und Ansicht Tag-Name sollte gleich sein
[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);
}
Es funktioniert für mich
Ja, ich stimme auch. Sie können auf jeden Fall Dateien hochladen mit ‚Ajax.BeginForm'.Add 'enctype = "multipart / form-data"' zum Objekt Ajaxoptions.