2011-11-08 19 views
7

Bir jQuery ajax çağrısı var; bu kutuda, onay kutularının bir tablosundan seçilebilecek int kullanıcı kimliklerini göndermeye çalışıyorum.MVC Ajax çağrısı boş diziyi/dizgesini doğru şekilde bağlamaz

Hiçbir kullanıcının seçilmediği durumda sorun yaşıyorum. Boş bir dizi beklerdim ama aslında userId 0 (yani atanmamış bir int değeri) içeren bir uzunluk = 1 dizisi alırım.

aşağıdaki pasajı numbersList<int> { 0 } çünkü Assert başarısız problemi

$('#test').click(function() { 
    var numbers = $('.noElements').map(function() { 
     // (selector does not match any elements, to demonstrate) 
     return 1; 
    }).get(); 

    $.ajax({ 
     url: '/MyController/Test', 
     type: "GET", 
     data: { numbers: numbers, count: numbers.length } 
    }); 
}); 


public ActionResult Test(IEnumerable<int> numbers, int count) 
{ 
    Assert(numbers.Count() == count); 
    return null; 
} 

çoğalır. Bağlanma neden böyle oluyor?

+0

"1" yani numbers.Count() 1'dir. Fakat ideal olarak, hiçbir kullanıcı seçilmediğinde, numbers.Count() ideal olarak "0" olmalıdır. Ve sonra onun iddiası başarısız oluyor. Bu doğru mu ? –

+0

Aşağıdaki değişikliği eylem yönteminizde deneyebilir ve çalışıp çalışmadığını kontrol edebilirsiniz. IList ile IEnumerable değiştirin. Eğer işe yarayıp yaramadığına bakın, evet ise, o zaman bu yazıya detaylı bir cevap ekleyeceğim. –

+0

Numaralar, 1 uzunluklu bir uzunluk dizisidir. IEnumerable'dan 'IList’e geçiş yapmak herhangi bir fark yaratmayacaktır. – fearofawhackplanet

cevap

1

Varsayılan model birleştiricinin, jQuery AJAX çağrısı ile iletilen boş dizeyi, bir tamsayı (0) varsayılan değerini içeren tek bir öğe içeren bir tamsayı dizisine dönüştüreceğine inanıyorum. Eğer daha fazla bilgi ve alternatif çözümler için bu soruya bakın bu-

$('#test').click(function() { 
    var numbers = $('.noElements').map(function() { 
     return 1; 
    }); 
    if (numbers.length == 0) { 
     numbers = null; 
     count = 0; 
    } 
    else count = numbers.length; 

    $.ajax({ 
     url: '/Home/Test', 
     type: "GET", 
     data: { numbers: numbers, count: count } 
    }); 
}); 

gibi bir şey yaptıysam Kodunuz çalışacak - Kod biraz kafa, sayıları ayarlarken edilir How to post an empty array (of ints) (jQuery -> MVC 3)

+0

Evet boş bir diziyi geçirirken MVC'de destek yok gibi görünüyor. Ne garip. Akıl yürütmelerinin bu şekilde uygulanmasının ne olduğunu merak ediyorum, zaten bana hemen görünmez. – fearofawhackplanet

+0

Aslında, cevabımı silmem gerekiyordu, benim durumumda bile boş olmayan diziler hatalı bir şekilde serileştirildi (mvc2) – Bartosz