2017-04-13 32 views
8
public List<Region> Regions { get; set; } 

w modelu zwanym News.An Region model jestFormData dołączyć element tablicy

public class Region 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public static Region Parse(DataRow row) 
     { 
      return new Region 
      { 
       Id = Database.GetInteger(row["Id"]), 

       Name = Database.GetString(row["Region"]), 


      }; 
     } 
    } 

w JavaScript Używam AJAX metody POST z formdata. Chcę ustawić ten region.

var regionList = []; 
      if (selected === "region") { 
       if (region.length <= 0) { 
        toastr.warning('Lütfen en az bir bölge seçin !!!'); 
        return; 
       } 

       for (var i = 0; i < region.length; i++) { 

        var item = { 
         Id: region[i] 
        } 
        regionList.push(item); 
       } 
       console.log(regionList); 
       formData.append("Regions", regionList); 
      } 

Kod powyżej w JS napisałem tak, aby ustawić go

public ActionResult AddByRegion(News item) 
     { 
      int refPortal = SessionRepository.GetPortalId(); 
      if(refPortal!=1) 
       return View("List", NewsRepository.ListAll(SessionRepository.GetPortalId())); 
      if (item == null 
       || string.IsNullOrEmpty(item.Title) 
       || string.IsNullOrEmpty(item.Content) 
       ) 
       return Content(Serialization.JsonSerialize(new { Status = 400 })); 

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

i kod powyżej i dostanie w kontrolerze. Ale zawsze zwraca 0 rekordów, chociaż przynajmniej wybrałem dwa regiony.

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

       contentType: false, 
       processData: false, 
       success: function(data) { 
        var result = JSON.parse(data); 
        if (result.Result === "SUCCEED") { 
         toastr.success('@Resources.Resource.Success_MediaAdd'); 
         window.location.reload(); 
         return; 
        } 

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

        toastr.error('@Resources.Resource.Error_Unexpected'); 
        return; 
       }, 
       beforeSend: function() { 
        waitingDialog.show('Wait...'); 
       }, 
       complete: function() { 
        waitingDialog.hide(); 
       } 
      }); 

Moja metoda Ajax jest powyżej. Gdzie się mylę?

Z góry dziękuję.

+0

Konieczne jest uszeregowanie listy regionów – charlietfl

Odpowiedz

6

Jeśli używasz FormData do wysyłania danych, musisz .append() każdej indywidualnej nazwy/wartości do FormData. Od jego kolekcji, należy dołączyć Indexer kolekcji (który musi być zerowy w oparciu i konsekutywne), na przykład

formData.append("Regions[0].Id", someValue); 
formData.append("Regions[0].Name", someValue); 
formData.append("Regions[1].Id", someValue); 
formData.append("Regions[1].Name", someValue); 

ponieważ twój robi to w pętli, można użyć

for (var i = 0; i < region.length; i++) { 
    formData.append("Regions[" + i + "].Id", region[i]) 
} 
1
var regionList = []; 
    for (var i = 0; i < region.length; i++) { 
     var item = { 
      Id: region[i].Id, 
      Name : region[i].Name, 
     } 
     regionList.push(item); 
    } 

    regionList = JSON.stringify({ "item": regionList });//Here "item" name should match the parameter name in your Action method name in controller (item in your case.) 

Następnie przekazać obiekt regionList do $ .ajax jako danych.

$.ajax({ 
      type: 'POST', 
      url: '@Url.Action("AddByRegion", "News")', 
      data: regionList, 

      contentType: false, 
      processData: false, 
      .... 
     });