2015-09-19 81 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