2017-01-20 12 views
2

こんにちは私はコントローラにデータを投稿するのに問題があります。今私は以下のモデルを持っていますAjax FormData追加リストオブジェクト

public class Media 
    { 
     public int Id { get; set; } 
     public string Category { get; set; } 
     public string Guid { get; set; } 
     public string Title { get; set; } 
     public string Description { get; set; } 
     public List<int> Portals { get; set; } 
     public string Lang { get; set; } 
     public List<Folder> Folders { get; set; } 

     } 

次に、ファイルとこのモデルをコントローラに投稿します。私はフォルダなしですべてのデータを取るビューAJAX側の

var formData = new FormData(); 
      var totalFiles = document.getElementById("FileUpload").files.length; 
      if (totalFiles === 0) { 
       toastr.warning('Lütfen resim yükleyin.'); 
       return; 
      } 
      for (var i = 0; i < totalFiles; i++) { 
       var file = document.getElementById("FileUpload").files[i]; 

       formData.append("FileUpload", file); 
      } 

      var itemFolder= { 
       Id: refFolder 
      } 

      var folderss = []; 
      folderss.push(itemFolder); 

      var item = { 
       Title: title, 
       Description: desc,    
       Category: category, 
       Portals: portals, 
       Folders: folderss 
      } 
      formData.append("Title", title); 
      formData.append("Description", desc); 
      formData.append("Category", category); 
      formData.append("Portals", portals); 
      formData.append("Folders",folderss); 


      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("Add", "Media")', 
       data: formData, 

       contentType: false, 
       processData: false, 
       success: function (data) { 
        var result = JSON.parse(data); 
        if (result.Status !== 200) { 

         toastr.error('@Resources.Resource.Error_Unexpected'); 
         return; 
        } 

        if (result.Result === "SUCCEED") { 
         toastr.success('Resim kaydedilmiştir.'); 
         window.location.reload(); 
         return; 
        } else { 
         toastr.error('@Resources.Resource.Error_Unexpected'); 
        } 

       }, 
       error: function (error) { 
        toastr.error('@Resources.Resource.Error_Unexpected'); 
        return; 
       } 
      }); 

と私は

public ActionResult Add(Models.Media item) 
     { 
      if (item == null 
       || string.IsNullOrEmpty(item.Title) 
       || string.IsNullOrEmpty(item.Category)) 
       return Content(Serialization.JsonSerialize(new { Status = 400 })); 

      if (Request.Files.Count <= 0) 
       return Content(Serialization.JsonSerialize(new { Status = 401, Result = "NO_FILE" })); 

      return Content(Serialization.JsonSerialize(new { Status = 200, Result = MediaRepository.Add(item) })); 
     } 

のようなコントローラでこのポストのデータを取るが、それはヌル来属性。どうすればこの問題を解決できますか? ありがとう

+0

コレクションオブジェクトにはインデクサーが必要です。しかし、正しく表示されている場合は、 'var formdata = new FormData($( 'form').get(0));'をモデルに正しくシリアル化する必要があります。モデルをフォームデータに変換し、MVCで取得する](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/ 29293681#29293681)) –

答えて

3

フォルダーはオブジェクトのコレクションなので、それぞれのインデックスにインデックスを追加する必要があります。

var index = 0; 
for(var pair of folderss){ 
    var folder = pair[key]; 
    formData.append("Folders[" + index + "].Id", folder.Id); 
    index++; 
} 
+0

ありがとうございます。できます。 –