不能在Foreach请求中填充列表.文件循环
本文关键字:列表 文件 循环 填充 Foreach 请求 不能 | 更新日期: 2023-09-27 18:05:37
我有问题添加项目的列表与foreach循环通过Request.Files迭代。它似乎只添加列表中的最后一个对象?即使我的数据库保存了所有文件的条目,并且单个文件也被保存。
这是我发布到的控制器代码(from dropzone.js):
public ActionResult SaveDropzoneJsUploadedFiles()
{
List<FileObject> files = new List<FileObject>();
foreach (string fileName in Request.Files)
{
HttpPostedFileBase file = Request.Files[fileName];
// custom file object
var uploadFile = new FileObject();
// files come through, i get the name
uploadFile.Name = file.FileName;
// add to list (only adds last object?)
files.Add(uploadFile);
// files save
file.SaveAs(uploadFile.Path);
// db context saves
db.Files.Add(uploadFile);
db.SaveChanges();
}
}
fileObject类如下:
public class FileObject
{
public string Name { get; set; }
public string Description { get; set; }
public string Path { get; set; }
public string Type { get; set; }
public int Size { get; set; }
public string Hash { get; set; }
}
您的FileObject类是自定义类吗?如果是,您是否重写其中的GetHashCode方法?如果是,确保GetHashCode方法为每个新实例返回一个唯一的值。
:
根据你发布的内容,我不明白为什么这个列表只包含一个项目。
你有没有试过调试和逐步通过循环和观察列表,以确保它的内容没有被重置或项目被删除?还要为files[0] == uploadFile
添加监视,并确保该值为false或抛出异常(在列表为空的第一次传递期间)。
更新2 :
根据作者的新注释,听起来控制器方法被调用了多次。如果是这样,请尝试下面的代码更改来证明是这样的,但只有理解我真的不认为这是一个好主意:
public class DropzoneController
{
private static List<FileObject> files = new List<FileObject>();
public ActionResult SaveDropzoneJsUploadedFiles()
{
foreach (string fileName in Request.Files)
{
HttpPostedFileBase file = Request.Files[fileName];
// custom file object
var uploadFile = new FileObject();
// files come through, i get the name
uploadFile.Name = file.FileName;
// add to list (only adds last object?)
files.Add(uploadFile);
// files save
file.SaveAs(uploadFile.Path);
// db context saves
db.Files.Add(uploadFile);
db.SaveChanges();
}
}
}
如果文件列表开始像预期的那样运行,那么您的文件将通过多个调用进入。我不认为这是一个好主意,有这些文件的静态列表挂在周围,虽然它肯定是代码臭。
试试这个
if (Request.Files.Count > 0)
{
for (int i = 0; i < Request.Files.Count; i++)
{
var file = Request.Files[i];
...
}
}