Asp.net

為什麼 IFormFile 顯示為空,我該如何解決?

  • February 10, 2016

我在 VS 2015 中使用 ASP.NET 5、MVC 6。我正在製作一個 Web 應用程序。在我的表格上,我有:

   <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>

在我的控制器中:

       [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();
   }

我有一個更大的表單,其中包含要進入我的 FormViewModel 的母表單欄位(所有欄位都按應有的方式填充),實際上我嘗試將 IFormFileCollection、ICollection、IList、List 作為上述方法中的參數,而不是也將它直接放在我的視圖模型中。無論我是作為單個文件還是多個文件,在模型或控制器中,我總是得到空值。‘IFormFileCollecion files = Request.Form.Files’ 確實有效,但我不想這樣做,因為它應該按照我擁有或擁有的方式工作。當我將文件的屬性放在模型中時,我將“[Required]”放在它上面並且它不會觸發。

而且,更好的是,我用 fiddler 多次執行它,它實際上是在發布文件——那麼為什麼不將它們放入模型中呢?

我的依賴項錯了嗎?誰能想到可能導致這種情況的原因?

 "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"
 },

您的文件輸入具有“fileSelect”的名稱屬性。您的操作參數的名稱是“文件”。讓它們匹配,它應該可以工作。

引用自:https://stackoverflow.com/questions/35325854