为什么上传0个文件时IEnumerable <httppostedfilebase> count为1?</httppostedfilebase>

时间:2013-07-12 12:25:31

标签: c# asp.net-mvc-4 file-upload ienumerable httppostedfilebase

我有一个多上传表单,我想在启动上传时检查是否有任何文件。这是我的代码。

查看:

@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>中的这些数据是什么。谢谢。

1 个答案:

答案 0 :(得分:1)

虽然我对派对来说有点迟,但仍然。 我有同样的问题。在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);
                    }
                }