2015-05-14 54 views
2

我是網絡新手。這是我的actionRequest.Files - 無需foreach循環即可獲取第一個文件

[HttpPost] 
public virtual ActionResult SaveFile(IEnumerable<VacationSchedule.Models.VacationTypeViewModel> vacationTypes) 
     { 
      foreach (string fileName in Request.Files) 
      { 
       HttpPostedFileBase file = Request.Files[fileName]; 
       string type = file.ContentType; 
       string nameAndLocation = "~/Documents/" + System.IO.Path.GetFileNameWithoutExtension(file.FileName); 
       file.SaveAs(Server.MapPath(nameAndLocation)); 
      }  
      return View(MVC.Admin.ActionNames.Documents); 
     } 

問:我知道在Request.Files只能有一個文件。是否存在任何方式獲得這個文件沒有foreach週期?

+5

如何使用索引器? 'Request.Files [0]'? –

+0

你應該使用'Single()',如果你期望它完全是1個文件 –

+0

謝謝Selman。這非常簡單。 – Alexander

回答

1

可以使用FirstOrDefault擴展方法:

string fileName = Request.Files.Cast<HttpPostedFile>().FirstOrDefault(); 

if (!string.IsNullOrEmpty(fileName)) 
{ 
} 

或者乾脆三元運算符與索引訪問:

string fileName = Request.Files.Count > 0 ? Request.Files[0] : null; 
+0

'Request.Files'沒有'FirstOrDefault()' – Josh

+0

@Josh你說得對。我錯過了演員,因爲它實現了「IEnumerable」而不是「IEnumerable 」。 –

+0

歡呼聲進行編輯。 – Josh

1

獲取與文件的名稱第一個元素的索引/鍵:

var imagem = Request.Files[Request.Files.GetKey(0)];