2017-01-20 4 views
2

Hallo Ich habe ein Problem, Daten an den Controller zu buchen. Jetzt habe ich ein Modell,Ajax FormData append list Objekt

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

     } 

Dann werde ich Datei und dieses Modell auf Controller. In View AJAX Side

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

und ich möchte diese Post-Daten in der Steuerung wie

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

ich alle Daten nehmen, ohne Ordner Attribut es null geht. Wie kann ich dieses Problem lösen? Vielen Dank

+0

Sammlungsobjekte benötigen Indexer. Aber wenn Sie Ihre Sicht korrekt erzeugt haben, dann brauchen Sie nur 'var formdata = new FormData ($ (' form '). Get (0)); 'um korrekt zu Ihrem Modell zu serialisieren (siehe [wie man den ganzen Satz von Modell zu formdata und erhalten Sie in MVC] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-for-formdata-and-obtain-it-in-mvc/ 29293681 # 29293681)) –

Antwort

3

Da Ordner eine Sammlung von Objekten ist, müssen Sie jeden von ihnen mit einem Index hinzufügen.

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

Danke. Es klappt. –

Verwandte Themen