2012-10-24 2 views
8

... ASP.NET MVC 4 web sitesinden nasıl dosya ve form değerleri alırım? Ben görünümünde bu kullanılarak oluşturulan ediliyor bir açılan liste olan bir ASP.NET MVC Web sitesi var

@Html.DropDownList("Programs") 

Programlar

endeksinde ViewBag içine İş Nesne koleksiyonundan doldurulur tıkılıyor Ana Denetleyicisindeki eylem ...

\\get items... 
ViewBag.Programs = items; 

görünümü de potansiyel olarak aynı görünümde böyle alıyorum üç dosya var ...

<input type="file" name="files" id="txtUploadPlayer" size="40" /> 
<input type="file" name="files" id="txtUploadCoaches" size="40" /> 
<input type="file" name="files" id="txtUploadVolunteers" size="40" /> 

yukarıda belirtilen kontrollerin tamamı kullanılarak görünümünde oluşturulan bir Formunda bulunan ...

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <!-- file and other input types --> 
    <input type="submit" name="btnSubmit" value="Import Data" /> 
} 

Sorunlarım ben tüm dosyaları işlemek VE form alanlarını başvurmak için bir yol bulamıyorum olmasıdır.

Özellikle, kullanıcının açılır menüden hangi Programı seçtiğini bilmem gerekiyor.

hiç sorun bu kodu kullanarak dosyaları işleyebilir

...

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files) 
//public ActionResult Index(FormCollection form) 
{ 

    _tmpFilePath = Server.MapPath("~/App_Data/uploads"); 

    if (files == null) return RedirectToAction("Index"); 
    foreach (var file in files) 
    { 
     if (file != null && file.ContentLength > 0) 
     { 
      var fileName = Path.GetFileName(file.FileName); 
      var path = Path.Combine(_tmpFilePath, fileName); 
      if (System.IO.File.Exists(path)) System.IO.File.Delete(path); 

      _file = file; 

      file.SaveAs(path); 

      break; //just use the first file that was not null. 
     } 
    } 



    //SelectedProgramId = 0; 

    //DoImport(); 

    return RedirectToAction("Index"); 
} 

Ama AYRICA POST formu değerlerine erişmek için nasıl özellikle Programlar açılır seçilen değeri anlamaya (ve kayıt için olamaz Ayrıca değeri okuyamıyorum bir onay kutusu da vardır.) Fiddler bana yanıtın dosya referansları VE seçili program olduğunu gösterir, ancak ben bunları ASP.NET MVC kullanarak POST'tan nasıl çıkaracağımı anlayamıyorum.

Bu sorunun oldukça basit olduğunu biliyorum, ancak tüm web/http öğesini sadece MVC'yi değil, hala öğreniyorum.

EDIT Yanıtlarınız için teşekkürler. Cevabın hem dosyalarda hem de form değerlerinde POST'a aktarılmasında olduğu düşüncesi vardı.

Son sorum şu ki ... HTMLBeginForm bloğunu hem dosyalara hem de form değerlerine aktarmak için nasıl değiştirebilirim? Şu anda

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    //do stuff 
} 

Bu ne using ifadesi ActionResult ayrı parametre olarak hem form değerleri ve dosyaları almak olmalı ... var?

DÜZENLEME MY DÜZENLEME
Ben ayıklayıcı iki dosya ve form boş olmayan olduklarını gösteriyor ... herhangi bir değişiklik yapmanız gerekmez gibi görünüyor. Güzel! Bu doğru mu?

cevap

7

bu o

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files, FormCollection form) 
{ 
    //handle the files 

    //handle the returned form values in the form collection 
} 

Bunu [HttpPost] eylem 2 parametrelerinde geçmesi gerekir yapması gerektiğini düşünüyorum. HTML adını da girebilirsiniz.

Düzenleme: ASP.NET'te formlarda da sorunlar yaşadım. Scott Allen'ın bu blog yazısına bakmanızı öneriyorum.http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx

1

yayınlanan dosya ve form değerleri hem de içeren bir ViewModel tipi kullanın, veya POST değerleri için .Form[key] ve yayınlanan dosyalar için .Files[key] nesneden (Controller.Request özelliği ile erişilebilir) HttpRequest kullanın.