2010-03-22 42 views
6

Tengo un formulario que vincula un modelo y una carga de archivo utilizando el enlace predeterminado para HttpPostedFileBase.Enlazando HttpPostedFileBase usando Ajax.BeginForm

Esto funciona bien cuando se utiliza Html.BeginForm(). Sin embargo, quería realizar la misma acción usando AJAX, así que reemplacé esto con Ajax.BeginForm() cambiando los parámetros en consecuencia.

El modelo aún se enlaza correctamente, sin embargo, no puedo obtener la carga del archivo para vincularlo a HttpPostedFileBase.

Esto se une el modelo y el archivo de carga:

<% 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) 

caso de no ser posible, y si es así, ¿qué estoy haciendo mal? Gracias.

Respuesta

9

No puede cargar archivos con AJAX. Una forma de lograr esto es utilizar un iframe oculto que simule una llamada AJAX y realice la carga del archivo real o use Flash. Aquí hay un muy buen plugin de jQuery Form que usa un iframe oculto que es capaz de ajaxificar transparentemente un envío de formulario que contenga campos de archivo.

+0

Gracias por aclarar eso. ¡Utilicé el complemento jQuery Form hace algún tiempo, así que debería haberlo recordado! Aclamaciones. – TonE

-1

Sí, también estoy de acuerdo. Puedes subir archivos definitivamente usando 'Ajax.BeginForm'.Add' enctype = "multipart/form-data" 'al objeto AjaxOptions.

0

AÑADIR id = "archivo" en su entrada etiqueta

EN SU PARÁMETROS ActionResult HttpPostedFileBase nombre de 'archivo' y la vista nombre de la etiqueta debe ser la misma

[HttpPost] [ValidateAntiForgeryToken] ActionResult público crear (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); 
    } 

que funciona para mí

+3

¿Por qué estás gritando? –

+1

Lo siento, mi internet se desconecta continuamente, estoy gritando para responder a la pregunta de mención –

Cuestiones relacionadas