Httprequest.files.count никогда не равно нулю
-
08-10-2019 - |
Вопрос
У меня есть форма на странице HTML, которую пользователь должен использовать для загрузки файла, который сообщает на страницу ASPX. В коде, позади, я хочу проверить, если файл фактически загружен.
if (Request.Files.Count > 0)
{
DoStuff(Request.Files[0]);
}
else
{
throw new Exception("A CSV file must be selected for upload.");
}
Я никогда не добираюсь до конца. Это просто как asp.net работает? Если у меня есть входной элемент файла типа, он всегда собирается загрузить «файл», даже если он не выбран?
Какой правильный способ сделать это? Может быть, это?
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.");
}
Решение
Может быть, просто это сделает:
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.");
}
Другие советы
Request.Files.Count
всегда содержит нет. из <input type="file">
элементы в вашей форме, завернутый в Key:Value
хранить.
Следовательно, если ваша опубликованная форма не содержит ни одного <input type="file">
Теги, то Request.Files.Count
вернусь 0
.
Каждый Key
это name
принадлежащий <input type="file" name="OneOfTheKeys">
и значение имеет тип HttpPostedFileWrapper
.
Видеть здесь узнать о HttpPostedFileWrapper
.
Вы должны использовать элемент управления Fileupload и проверять .hasfiles, чтобы увидеть, было ли что-то загружено.
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.aspx.
Я также бы убедился, что данные возвращаются по методу .count, не является строкой. Строковое значение «0» всегда больше значения int 0; который всегда вернутся в этом состоянии.
Я бы попробовал опечатывать .count return в качестве int, чтобы убедиться, что сравниваются правильные типы. Даже строка '-1' имеет более высокое значение бита, чем int ill.
Просто мысль, хотя я мог ошибаться ....