Pregunta

Tengo un formulario que se une a un modelo y la carga de un archivo utilizando el cuaderno predeterminada para HttpPostedFileBase.

Esto funciona bien cuando el uso de Html.BeginForm().Sin embargo, yo quería realizar la misma acción a través de AJAX para que sustituyó a este con el Ajax.BeginForm() el cambio de los parámetros en consecuencia.

El modelo que aún se une correctamente, sin embargo no puedo obtener el archivo de carga para unirse a la HttpPostedFileBase.

Esto se une el modelo y la carga de archivos:

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

Esto sólo se une el modelo:

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

La acción del controlador:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)

Debe ser esto posible, y si es así ¿qué estoy haciendo mal?Gracias.

¿Fue útil?

Solución

No se pueden cargar archivos con AJAX. Una forma de lograr esto es utilizar un iframe oculto que simulará una llamada AJAX y realizar la carga de archivos real o usar Flash. Aquí hay un muy buen Formulario jQuery plugin de usando un iframe oculto que es capaz de ajaxifying transparente una envío del formulario contiene campos de archivo.

Otros consejos

Es posible, la respuesta está aquí:

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

Lo hice yo mismo y está garantizado que funciona.

AGREGAR id="file" en su etiqueta de entrada

EN SU ACTIONRESULT PARÁMETRO HttpPostedFileBase 'archivo' nombre y ver el nombre de la etiqueta debe ser el mismo

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

A MÍ ME FUNCIONA

Si también estoy de acuerdo. Puede definitivamente subir archivos utilizando enctype = "multipart / form-data" 'Ajax.BeginForm'.Add '' a los AjaxOptions objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top