asp.net mvc - net - Request.Files.Count siempre 0 mientras se carga la imagen en MVC 5
upload files in asp net mvc with javascript and c# (4)
Necesitas cambiar el método de publicación.
Necesita agregar:
new { enctype = "multipart/form-data" }
Aquí está la etiqueta del formulario completo
@using (Html.BeginForm("Cars", "Expense", FormMethod.Post,
new { enctype = "multipart/form-data" }))
Tengo un controlador de Post en un modelo con algunos campos de cadena y una imagen. El código idéntico exacto funciona en MVC4, pero en MVC 5, el archivo Request.Files.Count siempre es 0
Mi modelo tiene un byte [] para la imagen en lugar de HttpPostedFileBase
Mi vista:
@using (Html.BeginForm("Create", "HotelManager", FormMethod.Post, new { enctype = "multipart/form-data", data_ajax = "false" }))
{
@Html.AntiForgeryToken()
@Html.TextBoxFor(model => model.Title, new { @class = "form-control" })
@Html.TextAreaFor(model => model.Description, new { @class = "form-control", @rows = "7" })
<input type="file" class="form-control filestyle">
<input type="submit" value="Submit" class="btn btn-block" />
}
He intentado omitir data_ajax = "false" pero no sirve de nada.
Mi Post Controller es el siguiente:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Title,Description,Image")] Hotel hotel)
{
if (ModelState.IsValid)
{
// deal with the uploaded file
if (Request.Files.Count > 0)
{
HttpPostedFileBase file = Request.Files[0];
if (file != null && file.ContentLength > 0)
{
// Code to process image, resize, etc goes here
}
}
// Other code to add the hotel to db goes here
}
En el depurador veo que el Request.Files.Count siempre es cero, no sé por qué? He copiado tanto la vista como el código del controlador de otro proyecto MVC4 donde funciona bien.
Key Value
Request POST /HotelManager/Create HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Referer http://localhost:4976/HotelManager/Create
Accept-Language en-US,en;q=0.5
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; ASU2JS; rv:11.0) like Gecko
Content-Type multipart/form-data; boundary=---------------------------7de207070a24
Accept-Encoding gzip, deflate
Host localhost:4976
Content-Length 946
DNT 1
Y en la ventana de IE Developer veo que el cuerpo del formulario está vacío.
Para agregar es necesario cambiar el método de publicación.
Necesita agregar:
new { enctype = "multipart/form-data" }
Aquí está la etiqueta del formulario completo
@using (Html.BeginForm("Cars", "Expense", FormMethod.Post,
new { enctype = "multipart/form-data" }))
Esas líneas son esenciales; sin ellos, no podrá guardar una entrada de tipo de archivo. Me senté durante 6 horas tratando de resolver eso.
Perdí tanto tiempo y resultó que todo lo que tenía que hacer era usar el atributo de nombre también
<input type="file" name="somename">
el atributo de nombre faltaba en mi nuevo proyecto.
Una de las razones por las que Request.Files.Count se convierte en 0 es cuando intenta cargar un archivo más grande que el maxRequestLength especificado en el archivo Web.config. Asegúrese de verificar este valor si tiene un problema con Request.Files.Count.
<configuration>
<system.web>
<httpRuntime maxRequestLength="4096" />
</system.web>
</configuration>
ACTUALIZACIÓN: Es posible que esta respuesta no esté directamente relacionada con el problema de OP, pero como Google enumera esta publicación superior para el problema de Request.Files.Count = 0, publicó la respuesta que funcionó para mí.