2015-05-14 50 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)];