10

我在 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.");
}
4

5 回答 5

8

也许这会做:

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.");
}
于 2010-12-10T19:06:13.560 回答
7

Request.Files.Count始终包含编号。表单中的<input type="file">元素,包装在Key:Value商店中。

因此,如果您发布的表单不包含任何<input type="file">标签,那么Request.Files.Count将返回0.

每个Key都是 的name并且<input type="file" name="OneOfTheKeys">值的类型是 HttpPostedFileWrapper

请参阅此处了解HttpPostedFileWrapper

于 2014-03-03T13:04:32.033 回答
2

您应该使用 FileUpload 控件并检查 .HasFiles 以查看是否上传了任何内容。

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

于 2010-12-10T18:13:29.467 回答
1

如上所述,一切都已到位。添加FormMethod.Post解决了我的问题。

FormMethod.Post, new { enctype = "multipart/form-data"}
于 2020-12-18T17:52:41.143 回答
-1

我还要确保 .count 方法返回的数据不是字符串。'0' 的字符串值总是大于 0 的 int 值;在那种情况下,它总是会返回 true。

我会尝试将 .count 返回类型转换为 int 以确保正在比较正确的类型。即使是字符串 '-1' 也具有比 int zero 更高的位值。

只是一个想法,虽然我可能是错的......

于 2010-12-10T23:15:09.143 回答