2011-11-08 12 views
7

सही ढंग से बाध्य नहीं करता है मेरे पास एक jQuery AJAX कॉल है जिसमें मैं उन उपयोगकर्ताओं की int आईडी भेजने की कोशिश कर रहा हूं जिन्हें चेकबॉक्स की तालिका से चुना जा सकता है।jQuery अजाक्स कॉल के साथ एमवीसी सही सरणी/संख्यात्मक

मुझे इस मामले में कोई समस्या है कि कोई उपयोगकर्ता नहीं चुना गया है। मैं एक खाली सरणी की अपेक्षा करता हूं लेकिन वास्तव में मुझे लंबाई = 1 की एक सरणी मिलती है, जिसमें उपयोगकर्ता आईडी 0 (यानी एक असाइन किए गए int मान) होते हैं।

निम्नलिखित स्निपेट समस्या reproduces

$('#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; 
} 

जोर विफल रहता है क्योंकि numbersList<int> { 0 } है। इस तरह बाध्यकारी क्यों हो रहा है?

+0

लिए "1" यानी numbers.Count() 1 है। लेकिन आदर्श रूप से जब कोई उपयोगकर्ता नहीं चुना जाता है, तो संख्याएं। गणना() आदर्श रूप से "0" होनी चाहिए। और उसके बाद जोर विफल रहा है। क्या ये सही है ? –

+0

क्या आप अपनी क्रिया विधि में निम्नलिखित परिवर्तन आज़मा सकते हैं और देख सकते हैं कि यह काम करता है या नहीं। IList के साथ IENumerable बदलें। देखें कि यह काम करता है, यदि हां, तो मैं इस पोस्ट का विस्तृत उत्तर जोड़ूंगा। –

+0

संख्या 1s की 0 लंबाई सरणी है। 'IENumerable' से 'IList' में बदलना कोई फर्क नहीं पड़ता। – fearofawhackplanet

उत्तर

1

मेरा मानना ​​है कि डिफ़ॉल्ट मॉडल बाइंडर jQuery एजेक्स कॉल द्वारा एक पूर्णांक सरणी में पारित खाली स्ट्रिंग को परिवर्तित करेगा जिसमें एक एकल तत्व होता है जिसमें पूर्णांक (0) का डिफ़ॉल्ट मान होता है। यदि आप इस-

$('#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 } 
    }); 
}); 

की तरह कुछ अधिक जानकारी और वैकल्पिक समाधान के लिए इस सवाल का देखा था अपने कोड काम करेगा - कोड है थोड़ा भ्रामक है, आप संख्या की स्थापना कर रहे हैं How to post an empty array (of ints) (jQuery -> MVC 3)

+0

हाँ ऐसा लगता है कि एक खाली सरणी पास करने के लिए एमवीसी में कोई समर्थन नहीं है। कितना अजीब है। मुझे आश्चर्य है कि उनका तर्क इस तरह कार्यान्वित करने के लिए क्या था, यह वैसे भी मेरे लिए तुरंत स्पष्ट नहीं है। – fearofawhackplanet

+0

असल में, मुझे अपना जवाब हटाना पड़ा, क्योंकि मेरे मामले में भी गैर-खाली सरणी अनुचित तरीके से क्रमबद्ध हो गईं (एमवीसी 2) – Bartosz

संबंधित मुद्दे