2016-02-10 27 views
11

VS 2015'te ASP.NET 5, MVC 6 kullanıyorum. Web uygulaması yapıyorum. Benim form üzerinde var: I (TÜM alanlar olması gerektiği gibi doldururken benim FormViewModel giriyoruz içinde anne form alanları ile çok daha büyük bir form varIFormFile neden null gösteriyor ve nasıl düzeltebilirim?

 [HttpPost] 
    public async Task<IActionResult> FileForm(FileViewModel vm, IFormFile file) 
    { 
     if (ModelState.IsValid) 
     { 
      //IFormFileCollection files = Request.Form.Files; 
      string filePath = Path.Combine("C:", "transfers"); 
      //foreach (var file in files) 
      //{ 
       if (file != null && file.Length > 0) 
       { 
        var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); 
        await file.SaveAsAsync(Path.Combine(filePath, fileName)); 
       } 
      //} 
      ModelState.Clear(); 
     } 
     return View(); 
    } 

: benim denetleyicisi

<form method="post" enctype="multipart/form-data"> 
    <div id="uploadSection" > 
     <label >Select files for upload</label> 
     <input type="file" id="fileSelect" name="fileSelect" multiple /> 
    </div> 

    <div> 
     <input type="submit" id="thisbutton" value="button" /> 
    </div> 
    </form> 

) ve IFormFileCollection, ICollection, IList, List'i yukarıdaki yöntemde parametre olarak kullanmaya çalıştım ve bunun yerine doğrudan benim görünüm modelime koydum. Tek bir dosya veya çoklu olarak, modelde veya kontrolörde yapsam da, her zaman boş olurum. 'IFormFileCollecion files = Request.Form.Files' aslında işe yarıyor, ancak böyle yapmak istemiyorum çünkü sahip olduğum ya da sahip olduğum şekilde çalışmalı. Modelimde dosya için özelliği yerleştirdiğimde, bunun üzerinde "[Zorunlu]" koydum ve tetiklenmiyor.

VEYA Daha da iyisi, bunu daha çok kemancı ile yaptım ve aslında dosyaları SIKIYORUM. Öyleyse neden modele dahil edilmiyorlar?

Bağımlılığım yanlış mı? Bunun nedenini düşünecek biri var mı?

"dependencies": { 
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final", 
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", 
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", 
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", 
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final", 
    "Microsoft.AspNet.Http": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final" 
    }, 

cevap

26

Dosya girişinizde "fileSelect" ad özniteliği vardır. Parametrenizin işleminizin adı "dosya" dır. Onları eşleştirin ve işe yaramalı.

+1

Bunu yaptı. Diğer tüm form alanlarındaki kimliğimi kullanmadığımı bile fark etmedim, asp-for kullanıyordum. Üzerinde isim/kimlik vardı, çünkü test ettiğim bir jQuery işlevi vardı. Teşekkür ederim. – nebulous

+3

Bu, ajax: 'formData.append (" dosya ", dosya) aracılığıyla bir dosya gönderirken de geçerlidir;" Bu sorunu çözmek için bana saatler sürdü. Eylemdeki parametrenin adı gönderilen adla eşleşmelidir. Aksi takdirde, kontrol cihazı talebi işleyecek, ancak parametre sıfır olacak –

+0

Lifesaver! Çok teşekkürler! – Vladislav

İlgili konular