2014-12-05 39 views
0

我想向我的MVC控制器發佈三件事:一個圖像和兩個字符串。發佈到MVC控制器的文件爲空

查看,我有一個表格,使用enctype="multipart/form-data",在選擇圖片文件後自動提交表格。這是在提交處理這種形式:

$("#PhotoUploadForm").on("submit", function (event) { 
     event.preventDefault(); 

     var ImageData = $("#PhotoUploadFileInput").val(); 
     var GuestNumber = $("#GuestID").val(); 
     var TCSA_ID = vm.GetSelectedTreatmentAreaTCSA_ID(vm.Photographs.SelectedTreatmentArea()); 

     var dto = { 
      ImageData: ImageData, 
      GuestNumber: GuestNumber, 
      TCSA_ID: TCSA_ID 
     } 

     $.ajax({ 
      url: 'SaveImage', 
      type: "POST", 
      contentType: "multipart/form-data", 
      data: ko.toJSON(dto), 
      success: function (data) { 
       console.log(submitted); 
      } 
     }); 
    }); 

dto對象在我型號定義:

public class PhotoUploadDTO 
{ 
    public HttpPostedFileBase ImageData { get; set; } 
    public string GuestNumber { get; set; } 
    public string TCSA_ID { get; set; } 
} 

在我控制器,我有在dto採取的行動一個參數:

public ActionResult SaveImage(PhotoUploadDTO dto) 
    { 
    //etc. 
    } 

當我嘗試發帖dto,所有內容都發布爲空。這對我來說很成問題,因爲我希望能夠將圖像和兩個字符串同時發送到控制器。

我懷疑問題是與var ImageData(其設置爲<input type="file" id="PhotoUploadFileInput">值在我的視圖),並且它被張貼C:/fakepath/etc.但不是實際的圖像文件。這很令人沮喪,因爲我知道如果我有一個表格,只是發佈圖像,但我需要使用此提交處理程序,我不知道如何將實際圖像數據它。

爲什麼數據null遇到MVC控制器時,我怎麼能發佈這三個項目,同時仍然能夠使用提交處理程序?

+1

您無法通過ajax上傳文件。有一些解決方法,比如通過iframe上傳文件,但不幸的是你不能這樣做。 – 2014-12-05 18:42:32

+0

我認爲你的評論應該足以作爲答案,如果你想發佈它作爲答案。 – alex 2014-12-05 18:45:33

+0

@MelanciaUK'你不能通過ajax *這種方式上傳文件'對於混淆 – 2014-12-05 18:53:42

回答

1

通過ajax上傳文件是一件棘手的事情。一些最現代的網頁瀏覽器通過使用File API來處理這個問題,它確實可以通過ajax上傳文件。但是,使用此解決方案不適用於舊版瀏覽器上的用戶。

最好的辦法就是使用jquery插件或類似的東西,這些插件會回退諸如通過iframe或其他解決方法上傳文件等技術。

+0

我發現jQuery File Upload插件可以在這裏工作:https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional-form-data – alex 2014-12-08 14:33:27

相關問題