Domanda

Ho una forma che lega un modello e un file caricare con il legante di default per HttpPostedFileBase.

Questo funziona bene quando si utilizza Html.BeginForm (). Tuttavia, ho voluto eseguire la stessa azione utilizzando AJAX così ho sostituito questo con Ajax.BeginForm () la modifica dei parametri di conseguenza.

Il modello si lega ancora correttamente, tuttavia non posso ottenere il caricamento di file da associare al HttpPostedFileBase.

Questa lega il modello e l'upload di file:

<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

Questa lega solo il modello:

<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

L'azione del controller:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)

Se ciò sia possibile, e se sì che cosa sto facendo male? Grazie.

È stato utile?

Soluzione

Non è possibile caricare i file con AJAX. Un modo per raggiungere questo obiettivo è quello di utilizzare un iframe nascosto, che simulerà una chiamata AJAX ed eseguire l'upload di file effettivo o utilizzare Flash. Ecco un bel plugin per jQuery Modulo utilizzando un iframe nascosto, che è in grado di ajaxifying in modo trasparente un modulo di presentazione contenente campi del file.

Altri suggerimenti

E 'possibile, la risposta è qui:

https://stackoverflow.com/a/13522052/1067149

L'ho fatto io ed è garantito che funziona.

AGGIUNGI id="file" nel vostro ingresso tag

nel parametro di ActionResult HttpPostedFileBase nome di 'file' e vista nome di tag dovrebbe essere lo stesso

        [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);
        }

Funziona per me

Si Sono anche d'accordo. È sicuramente possibile caricare file utilizzando 'Ajax.BeginForm'.Add 'enctype = "/ form-data multipart"' ai AjaxOptions oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top