2016-10-07 18 views
0

私はカスタムファイルアップローダを使用しており、ファイル[]という名前のファイルパラメータを渡す必要があります。これは意味をなさないので、ファイルアップローダのこのデフォルト名でファイルデータが送信されるためです。しかし、私はコントローラで同じパラメータ名を使用することはできません。ですから、入力制御の名前パラメータとしてファイル[]を使用するにはどうすればよいですか?ファイルをAJAX経由でコントローラに渡すことはできません

ビュー:

<input type="file" name="files[]" id="filer_input" multiple="multiple" > 


<script>  

    function create(event) { 

     event.preventDefault(); 
     var formdata = new FormData($('#frmCreate').get(0)); 

     $.ajax({ 
      type: "POST", 
      url: '@Url.Action("Create", "Experiment")', 
      cache: false, 
      dataType: "json", 
      data: formdata,   
      processData: false, 
      contentType: false 
     }); 
    }; 

</script> 


コントローラー:

public JsonResult Insert([Bind(Exclude = null)] ViewModel model, 
    IEnumerable<HttpPostedFileBase> files) 
{ 
    //code removed for brevity 
} 

任意のアイデア?

+2

で含むFileContent機能を実装パラメータ。 –

+2

確かに分かりませんが、var files = Request ["files []"]を使って試してみてください。 –

+2

デフォルトのModelBinderはマルチパートリクエストでは機能しません。上記のように 'Request.Files'を使用するか、別のModelBinderを作成/検索する必要があります –

答えて

0

多分、そのようなものがあなたを助けるかもしれません。

<input type="file" name="filesInput" id="filer_input" multiple="multiple" > 

public JsonResult Insert(FormCollection formCollection) 
{ 
    ...formCollection["filesInput"] 
} 

あなたはViewModelににコレクション「FilesInput」を追加し、modelbinderがあなたのために仕事をさせてみてください。このようにして、Insertメソッドのモデルパラメータのみを持つことになります。

+0

前に思ったのは本当に良いアイデアです。しかし、それを試した後、FilesInput []( "[]"はアップロード制御のために自動的に追加されます)として掲示されたFilesInputパラメータとFilesInputパラメータがコントローラのファイルパラメータとしてnullであることがわかります。一方、** public byte [] FilesInput {get;}を追加しました。セット; } **その定義に関しては問題はないと思います。そうではありませんか? –

+0

また、** public ICollection FilesInput {get;}を使用しようとしました。セット; } ** ViewModelでは残念ながら、コントローラには意味をなさない値が残っています。ありがとう... –

関連する問題