为什么IEnumerable<;HttpPostedFileBase>;当我上载0个文件时,计数为1
本文关键字:文件 0个 lt IEnumerable HttpPostedFileBase gt 为什么 上载 | 更新日期: 2023-09-27 18:22:10
我有一个多个上传表单,我想在启动上传时检查是否有任何文件。这是我的密码。
视图:
@using (Html.BeginForm("Upload", "Home", FormMethod.Post,
new { enctype = "multipart/form-data"}))
{
<input name="files" type="file" multiple="multiple" />
<input type="submit" value="Upload" />
}
控制器:
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
if (files.Count() > 0) Console.WriteLine(files.Count()); // display 1
if(files.Any()) Console.WriteLine(files.Any()); // display true
if (files.First() == null) Console.WriteLine("first null"); // display "first null"
return View();
}
当我提交一个空表单时,为什么我的程序会显示这样的结果?我可能会用JS检查我的字段,但我想了解IEnumerable<HttpPostedFileBase>
中的这些数据是什么。非常感谢。
虽然我参加聚会有点晚了,但还是来了。我也有同样的问题。在asp.net上发现一篇文章,他们说这是故意的。http://aspnetwebstack.codeplex.com/workitem/188
这是故意的,因为请求包含filename="的段。如果您不想创建该文件,请从请求中删除该段。我通过以下方式修复了它。
if (RelatedFiles.Any())
{
foreach (var file in RelatedFiles)
{
if (file != null) // here is just check for a null value.
{
byte[] uploadedFile = new byte[file.InputStream.Length];
file.InputStream.Read(uploadedFile, 0, file.ContentLength);
FileInfo fi = new FileInfo(file.FileName);
var upload = new UploadedFile
{
ContentType = file.ContentType,
Content = uploadedFile,
FileName = fi.Name,
ContentExtension = fi.Extension,
};
newIssuePaper.RelatedDocuments.Add(upload);
}
}