我在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.");
}
答案 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。
只是一个想法,虽然我可能是错的......