2015-09-19 73 views
1

我想在我的web应用程序上传多个文件。因此我使用IEnumerable<HttpPostedFileBase>类来循环每个文件。但是,我得到一个错误,说明 -使用MVC上传和处理多个文件

错误System.Collections.Generic.IEnumerable<System.Web.HttpPostedFileBase>不包含“的ContentLength”,没有扩展方法“的ContentLength”接受System.Collections.Generic.IEnumerable<System.Web.HttpPostedFileBase'类型的第一个参数的定义可以找到(是否缺少using指令或装配参考?)

此错误适用于HttpPostedFileBase类中存在的所有属性。我正在尝试编辑该课程,但它不允许。我试图在ViewModel中创建IEnumerable的HttpPostedFileBase类,但它再次失败。我在这里错过了什么?

更新 - 代码: 查看

<div class="col-sm-8">         
<input type="file" name="Files" id="file1" class="form-control" /> 
    <input type="file" name="Files" id="file2" class="form-control" /> 
    <input type="submit" value="Save" class="btn btn-default" name="Command"/> 
</div> 

控制器

public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> Files) 
{ 
    foreach (var item in Files) 
    { 
      if (Files != null && Files.ContentLength > 0) 
      { 
       FileUpload up = new FileUpload(); 
       up.PersonId = model.PersonId; 
       up.FileName = System.IO.Path.GetFileName(Files.FileName); 
       up.MimeType = Files.ContentType; 
       up.FileContent = Files.Content; 
       bll.AddFileUpload(up); 
      } 
    } 
    return View(); 
} 
+0

请分享您使用一些代码,用于处理HttpPostedFileBase项目,因为它看来你是试图以错误的方式访问收集 –

+0

请参阅我编辑的问题,我已经包含代码。谢谢 – user1221765

+0

https://msdn.microsoft.com/en-us/library/system.web.httppostedfilebase_properties(v=vs.110).aspx – user1221765

回答

2

的问题是在这里:

foreach (var item in Files) 
    if (Files != null && Files.ContentLength > 0) 

您正在使用foreach迭代集合,但仍检查IEnumerable,这称为File而不是每个项目。你想要的是:

foreach (var item in Files) 
    if (item != null && item.ContentLength > 0) 

作为一个侧面说明,您可以使用Enumerable.Where筛选出的项目:

foreach (var item in Files.Where(file => file != null && file.ContentLength > 0)) 
{ 
    FileUpload up = new FileUpload 
    { 
     PersonId = model.PersonId, 
     FileName = System.IO.Path.GetFileName(item.FileName), 
     MimeType = item.ContentType, 
     FileContent = item.Content, 
    }; 
    bll.AddFileUpload(up); 
} 
+0

谢谢很多... – user1221765

+0

@ user1221765欢迎:) –

2

你试图调用.ContentLength的收集,而不是对集合中的文件。相反,尝试这样的:

// given postedFiles implements IEnumerable<System.Web.HttpPostedFileBase 
foreach(var postedFile in postedFiles) { 
var len = postedFile.ContentLength 
} 
+0

我已经尝试过了,请参阅我的更新代码 – user1221765

1

你的代码试图访问集合本身,但你需要访问收集项目是这样的:

foreach (var item in Files) 
{ 

FileUpload up = new FileUpload(); 
up.PersonId = model.PersonId; 
up.FileName = System.IO.Path.GetFileName(item.FileName); 
up.MimeType = Files.ContentType; 
up.FileContent = item.Content; 
bll.AddFileUpload(up); 
} 
+0

感谢它的工作 – user1221765