2012-03-20 15 views
6

benim dizi şöyle doldurulan:JavaScript'den C# 'ye kadar init listesi. Listeyi aldım, fakat boş. form verileri uygun şekilde yapılandırılmamış mı?

ComponentIDs:[74,445,732,351,348,347,1123,599,600,1053,350,601,602,603,332,99,877,919,349,348,347,347,349,348] 
RackInfo:Equipment Weight 

I: ağ üzerinden geçirilen olarak

[CompressionFilterAttribute] 
public JsonResult UpdateDiagrams(List<int> componentIDs, string rackInfo) 
{ 
    List<object> diagramInformation = new List<object>(componentIDs.Count()); 
} 

verilerim:

updateLabels: function() { 
    var diagrams = _stage.diagramLayer.getChildren(); 

    var componentIDs = new Array(); 

    for (var index = 0; index < diagrams.length; index++) { 
     componentIDs.push(diagrams[index].componentID); 
    } 

    var self = this; 
    $.ajax({ 
     url: '../PlanView/UpdateDiagrams', 
     type: 'POST', 
     data: { ComponentIDs: JSON.stringify(componentIDs), RackInfo: $('#RackInfoSelect').val() }, 
     success: function (data) { 
      console.log('success'); 
     }, 
     error: function() { 
      console.log("error"); 
     } 
    }); 
    }, 

sunucu tarafında bu yöntemi vardır RackInfo, başarıyla UpdateDiagrams List<string> beklemek için değiştirirseniz, bir ComponentIDs dizenin içindeki bir öğe ile bir liste olsun.

ben yanlış burada ne işim var?

DÜZENLEME: MVC3 altında çalışıyorum. Denetleyiciye geçerken bir tür otomatik seriden arındırma yapabilmem gerekir, nasıl yapacağından emin değilim.

ÇÖZÜM: Çözüm, JSON.stringify ibaret değilim componentIDs benim veri nesnesi sarmak için oldu. RackInfo değişken sunucu tarafını JSON'a dönüştürmeden alabilirim.

+0

Belki 'componentIDs.push (parseInt (diyagramlar [göstergesi] .componentID)); '? – MiMo

cevap

4

Gönderdiğiniz verilerin JSON biçiminde olmasını istiyorsanız, bunun gibi bir şey deneyin. MVC daha sonra sunucu tarafında otomatik olarak seri hale getirebilmelidir.

$.ajax({ 
    url: '../PlanView/UpdateDiagrams', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ 
     componentIDs: componentIDs, 
     rackInfo: $('#RackInfoSelect').val() 
    }), 
    success: function (data) { 
     console.log('success'); 
    }, 
    error: function() { 
     console.log("error"); 
    } 
}); 

(ben şu anda bunu test veremiyoruz, ama tamamen hata içermeyen olmasa bile o umarım doğru çizgisinde olmalıdır.)

+0

Bu, kutudan şampiyon gibi çıktı. Neden her zaman JSON.stringify'ı aramam gerektiğini merak ediyorum. –

+0

Bu kod, int'den başka bir şey kazara eklendiğinde bu kod kesilir. En nihayetinde onları bekledikten sonra başarısız olan otomatik süreçlere güvenmek yerine, TÜMÜNÜ TÜM VERİLERİNİZİ sterilize etmeli ve değerlerinizi initlere ayrıştırmalısınız. Ve, uygulamanızı da daha az güvenli hale getirir. Tek bir kod satırından kaçınmak için mi? Kalite için kod! – frenchie

1

Sen dizeleri listesini içeren bir dize yolluyorlar. Sunucuya ulaştığında dizenin serileştirilmesi gerekiyor.

[CompressionFilterAttribute] 
public JsonResult UpdateDiagrams(string ListcomponentIDs, string rackInfo) 
{ 
    List<int> componentIDs = (from string s in ListcomponentIDs.Split(',') 
          select Convert.ToInt32(s)).ToList<int>(); 
} 

Parametreyi bir dizgiye değiştirdim. Bir int listesi olarak aldığınızda, ints listesinden geçmediğiniz için boş bir listeydi.

Ayrıca JS, sadece bunun üzerinde ToString diyoruz, dizi serialize gerek yoktur:

data: { ComponentIDs: componentIDs.toString() ... 

Yani veri parantez [] gelmez.

bana bu nasıl çalıştığını bildirin.

+0

O zaman/açık/seri hale getirilmeye gerek olmayan bir ints listesini nasıl iletebilirim? Yapılabileceğini biliyorum - bunun, ints'den daha karmaşık nesnelerle yapıldığını gördüm. –

+0

Json IS'nin tüm verileri, verileri seri hale getirmek/serileştirmek içindir. Yukarıya bakın, kodu biraz daha basitleştirdim. – frenchie

+0

Ve diyorum ki MVC'nin benim için bunu yapması gerekiyor. Şunlara bakın: http://uliasz.com/2010/07/passing-list-as-parameter-from-ajax-request-to-mvc-controller/ –

0

ASP.NET MVC ile test edemedik, ancak kaldırmak eğer JSON.stringify herşey düzgün çalışmalıdır.

  • ComponentIDs []:: 10
  • ComponentIDs []: 20
  • ComponentIDs []: 30
  • RackInfo: Ekipman Ağırlık

Bu JSON.stringify olmadan Form Verilerini olduğunu Bu, bir dizinin sunucuya gönderildiği normal yoldur. JSON.stringify ile

:

  • ComponentIDs: [10,20,30]
  • RackInfo: Rackinfo

JSON.stringify çağrısı dizeye diziyi dönüştürür "[ 10, 20, 30] "böylece denetleyiciye bir dize gönderiyorsunuz.

İlgili konular