Unión HttpPostedFileBase el uso de Ajax.BeginForm
-
21-09-2019 - |
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.
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.