Pregunta

Tengo un formulario en una página HTML que un usuario tiene que utilizar para cargar un archivo de mensajes a los que una página ASPX. En el código detrás, quiero probar si un archivo en realidad se ha cargado.

if (Request.Files.Count > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}

Nunca estoy volviendo a la otra. Se trata sólo de cómo funciona ASP.NET? Si tengo un elemento de entrada del tipo de archivo, es que siempre va a cargar un "archivo", incluso si no se ha seleccionado?

¿Cuál es la forma correcta de hacer esto? Tal vez esto?

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}
¿Fue útil?

Solución

Tal vez sólo esto va a hacer:

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
    DoStuff(Request.Files[0]);
}
else
{
    throw new Exception("A CSV file must be selected for upload.");
}

Otros consejos

Request.Files.Count siempre contiene el no. <input type="file"> de elementos en su forma, envuelto en una tienda Key:Value.

Por lo tanto, si su formulario enviado no contiene ninguna etiqueta <input type="file">, entonces Request.Files.Count volverá 0.

Cada Key es la name de la <input type="file" name="OneOfTheKeys"> y el valor es de tipo HttpPostedFileWrapper.

aquí a aprender sobre HttpPostedFileWrapper.

Debe utilizar los .HasFiles control y verificación FileUpload para ver si algo se ha subido.

http://msdn.microsoft. com / es-es / library / system.web.ui.webcontrols.fileupload.aspx

También me asegurarse de que objeto de la devolución por el método .count los datos no es una cadena. Un valor de cadena de '0' es siempre mayor que un valor de 0 int; que siempre volvería cierto en esa condición.

Yo intentaría typecasting el retorno .count como un int para asegurarse de que los tipos adecuados están siendo comparados. Incluso una cadena '-1' tiene un valor de bit más alta que int cero.

sólo un pensamiento, aunque podría estar equivocado ....

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