0

我正在開發MVC 5應用程序。我需要上傳多個文件。Asp.net MVC 5 Ajax多文件上傳可能需要價值提供者,建議?

我知道的是HttpPostedFile和HttpPostedFileBase類可以獲得一個文件。但我的情況是我需要一次上傳多個文件。

我的問題是,

1)由於使用AJAX多文件上傳的支持,我需要編寫新價值,使我的行動來接受多個文件? 2)如果我實現自定義值提供程序,我應該在action方法中使用哪個參數(應該是IEnumerable<HttpPostedFileBase> f)?因爲我這樣做了,並且我得到了null

更新

這裏是查看

我Ajax調用
var files = e.target.files; 
     if (window.FormData !== undefined) { 
      var fd = new FormData(); 
      for (x = 0; x < files.length; x++) { 
       fd.append("file" + x, files[x]); 
      } 
      // fd.append("fawad", "ali"); 
      $.ajax({ 
       type: "POST", 
       url: "/FileOp/FileUpload", 
       contentType: false, 
       processData: false, 
       data: fd, 
       sucess: function (result) { 
        // alert(); 
       }, 
       error: function (xhr, status, p3, p4) { 
        alert(xhr.responseText); 
       } 
      }); 

這裏是我的操作方法(HttpPost)

[HttpPost] 

    public object FileUpload(IEnumerable<HttpPostedFileBase> file) 

感謝

+1

你不需要自定義值提供商。你只需要你的視圖模型中的一個屬性(或者你的POST方法中的一個參數,它是'IEnumerable XXX',其中'XXX'是你的文件輸入的名稱(並且我假設你正在使用'FormData' [這個答案](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681)到上傳文件使用ajax –

+0

@StephenMuecke「您的文件輸入名稱」不可能,可以有x個文件,所以第一個文件是'file1',第二個是'file2'等等 – Alex

+0

@StephenMuecke在這裏我的控制器調用AJAX $就({ 類型: 「POST」, URL: 「/ FileOp /文件上傳」, 的contentType:假, 過程數據:假, 數據:FD, sucess:功能(結果){ // alert(); }, error:function(xhr,status,p3,p4){alert(xhr.responseText); } }); – Alex

回答

1

你添加文件命名file0file1,file2等,它們不會綁定到名爲file的參數。

腳本代碼更改爲

for (x = 0; x < files.length; x++) { 
    fd.append("file", files[x]); // modify 
} 

或者,你可以使用

fd.append("[" + x + "].file", files[x]); 
+0

謝謝,它的工作很好 – Alex