¿Hay alguna forma de que los archivos publicados (<input type="file" />
) participen en el enlace de modelo en ASP.NET MVC sin consultar manualmente el contexto de solicitud en un archivador de modelo personalizado y sin crear un método de acción separado que solo toma un archivo publicado como entrada?ASP.NET MVC ha publicado el enlace de modelo de archivo cuando el parámetro es Modelo
yo habría pensado que esto funcionaría:
class MyModel {
public HttpPostedFileBase MyFile { get; set; }
public int? OtherProperty { get; set; }
}
<form enctype="multipart/form-data">
<input type="file" name="MyFile" />
<input type="text" name="OtherProperty" />
</form>
public ActionResult Create(MyModel myModel) { ... }
embargo, dado el escenario anterior, MyFile
ni siquiera es parte de los valores del proveedor de valor en el contexto de unión. (OtherProperty
es, por supuesto.) Pero funciona si hago esto:
public ActionResult Create(HttpPostedFileBase postedFile, ...) { ... }
Entonces, ¿por qué no vinculante se producen cuando el parámetro es un modelo, y cómo puedo hacer que funcione? No tengo ningún problema con el uso de un archivador de modelo personalizado, pero ¿cómo puedo hacer esto en un archivador de modelo personalizado sin mirar Request.Files["MyFile"]
?
Para mayor coherencia, claridad y capacidad de prueba, me gustaría que mi código proporcione un enlace automático de todas las propiedades de un modelo, incluidas las vinculadas a los archivos publicados, sin inspeccionar manualmente el contexto de solicitud. Actualmente estoy probando el enlace del modelo usando the approach Scott Hanselman wrote about.
¿O estoy haciendo esto de la manera incorrecta? Como resolverias esto? ¿O esto no es posible por diseño debido al historial de separación entre Request.Form y Request.Files?
* Nota: * no pase por alto el atributo 'enctype' en el formulario. Debe especificarse como '" multipart/form-data "'. De lo contrario, el argumento 'HttpPostedFileBase' con el nombre correspondiente como el atributo' name' en la etiqueta de entrada, permanecerá 'null' en POST. –
He usado el mismo pero obtuve el error: - No puedo enlazar varios parámetros, en mi $ .ajax tengo establecido: - tipo: 'POST', dataType: 'json', contentType: 'multipart/form-data' , data: formData – ujjaval