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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top