2016-02-10 5 views
11

私はVS 2015でASP.NET 5、MVC 6を使用しています。私はWebアプリケーションを作っています。私のフォームに私が持っている:私は(すべてのフィールドは、彼らが必要として移入されている私のFormViewModelに入っていることで、母のフォームフィールドとはるかに大きいフォームを持っているIFormFileがnullを表示するのはなぜですか、どうすれば修正できますか?

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

:私のコントローラで

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

)、実際にIFormFileCollection、ICollection、IList、Listを上記のメソッドのパラメータとして配置し、代わりにそれを直接ビューモデルに配置してみました。モデルやコントローラーでファイルを1つにするか複数にするかは、常にnullになります。 'IFormFileCollecion files = Request.Form.Files'は実際には動作しますが、私のやり方で動作する必要があるため、そのようにしたくありません。 モデルのファイルのプロパティを配置するときに、その上に[必須]を置き、トリガーしません。

さらに、私はこれを複数回、フィドラーで実行しました。実際にファイルをポッティングしています - なぜ彼らはモデルにキャストされていませんか?

私の依存関係が間違っていますか?誰でもこれを引き起こす可能性があると考えることができますか?

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

答えて

26

ファイルの入力には「fileSelect」という名前属性があります。あなたの行動にあなたのパラメータの名前は "ファイル"です。それらを一致させるとうまくいくはずです。

+1

それでした。私は他のすべてのフォームフィールドでIDを使用していなかったことに気付かず、asp-forを使用していました。私はこれでテストしていたjQuery関数を持っていたので、これに名前/ idを付けました。ありがとうございました。 – nebulous

+3

これは、ajaxでファイルを送信する場合にも当てはまります。 'formData.append(" file "、file);'この問題を解決するまでに何時間もかかりました。アクション内のパラメーターの名前は、送信された名前と一致する必要があります。それ以外の場合、コントローラは要求を処理しますが、パラメータはnullになります –

+0

Lifesaver!どうもありがとう! – Vladislav

関連する問題