我在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 RETURT打字作为INT,以确保比较适当的类型。即使是字符串'-1'的位值也高于int零。

只是一个想法,尽管我可能错了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top