HTTPRequest.Files.Count永远不等于零

时间:2010-12-10 18:02:27

标签: c# asp.net httprequest httpfilecollection

我在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的运作方式吗?如果我有一个类型为file的输入元素,即使没有选择一个文件,它是否总是会上传一个“文件”?

这样做的正确方法是什么?也许这个?

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

5 个答案:

答案 0 :(得分: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.");
}

答案 1 :(得分:7)

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

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

每个Key都是name的{​​{1}},值类型为<input type="file" name="OneOfTheKeys">

请参阅here了解HttpPostedFileWrapper

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

FormMethod.Post, new { enctype = "multipart/form-data"}

答案 4 :(得分:-1)

我还要确保.count方法返回的数据不是字符串。字符串值“0”始终大于int值0;在这种情况下总是会返回真实的。

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

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