2015-05-14 4 views
2

Я новичок в сети. Это мой action:Request.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)]; 
Смежные вопросы