2011-08-19 17 views
7

मैं कोशिश कर रहा हूँ, और संघर्ष, एक MVC नियंत्रक कार्रवाई करने के लिए JSON के माध्यम से एक सरणी भेजने के लिए।JSON के माध्यम से MVC नियंत्रक से सरणी भेजें?

यहाँ मैं क्या है और क्या मैं कोशिश की है

//Get checked records 
var $checkedRecords = $(':checked'); //e.g. 3 rows selected = [input 4, input 5, input 6] 

//Have tried following: 
sendingVar: $checkedRecords.serializeArray(); // gives array of 0's 
sendingVar: JSON.stringify($checkedRecords); // gives "{\"length\":1,\"prevObject\":{\"0\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"length\":1},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"selector\":\":checked\",\"0\":{}}"...wtf 

//Post 
$.post(url, { sendingVar: sendingVar }, function(data) {alert(data); }); 

मैं यह कर कैसे करते है ...?

संपादित करें: उन है कि $checkedRecords भेजने का सुझाव देते हैं शीर्ष पंक्ति से "जैसा है" के लिए - जो काम नहीं कर रहा है। मैं jQuery ढांचे :(

uncaught exception: [Exception... "Could not convert JavaScript argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://.../.../.../jquery-1.4.4.min.js :: <TOP_LEVEL> :: line 141" data: no] 

जो मुझे लगता है कि यह कुछ ऐसा नहीं कर पाने के लिए अशक्त आवंटित करने के लिए प्रयास कर रहा है इसका मतलब में कहीं एक अजीब अपवाद

संपादित करें:। मैं MVC2 नहीं 3

उपयोग कर रहा हूँ

EDIT2:? @ सोमवार के जवाब- समस्या मैं कैसे[input 4, input 5, input 6] और नहीं [4,5,6] जैसी सरणी का निर्माण किया है की वजह से है के बाद - किसी भी विचार कैसे मैं सिर्फ बजाय सरणी में मान प्राप्त कर सकते

Edit3: नकली अप मतदान जब यह नहीं है बंद करो। क्या आपने वास्तव में मेरी समस्या पढ़ी है या जुड़ी समस्याओं को पढ़ा है? यह एक अलग मुद्दा है

@Daveo:

I don't want to build in an overriding custom attribute just to send an array from JSON, that is rediculous हम पहले से ही इस में शामिल किया गया है के रूप में सवाल-यह आवश्यक नहीं है।

MVC3 - irrelevant

+1

के संभावित डुप्लिकेट: http://stackoverflow.com/questions/320291/how-to-post-an-array- ऑफ-कॉम्प्लेक्स-ऑब्जेक्ट्स-जेसन-जेक्वायरी-टू-एएसपी-नेट-एमवीसी-कंट्रोल और http://stackoverflow.com/questions/4789481/post-an-array-of-objects-via-json-to- एएसपी निवल mvc3 – Daveo

+0

अपना इच्छित परिणाम क्या है? आपकी सरणी jQuery ऑब्जेक्ट्स है, स्ट्रिंगिफ़ संस्करण मेरे लिए सही दिखता है। आप इसे किस तरह दिखने की उम्मीद कर रहे हैं? – BZink

+0

यह केवल एक सरणी है जिसमें चेक किए गए आइटमों की स्ट्रिंग आईडी है। मैं चेक रिकॉर्ड्स को चयनित सभी आईडी के आइटमों की एक सरणी रखना चाहता हूं। चयनित इनपुट के 'मान' में मुझे आवश्यक आईडी मान शामिल है। – baron

उत्तर

22

यहाँ, मेरी डेमो, mvc2 का उपयोग है आशा है कि कुछ मदद करता है ~

सफलता की कुंजी traditional

सच

$(function(){ 
    var a = [1, 2]; 
    $.ajax({ 
     type: "POST", 
     url: "<%= ResolveUrl("~/Home/PostArray/") %>", 
     data: {orderedIds: a}, 
     dataType: "json", 
     traditional: true, 
     success: function(msg){alert(msg)} 
    }); 
}) 

को traditional पैरामीटर सेट jQuery के बाद से है 1.4 यह पैरामीटर मौजूद है क्योंकि क्वेरी पैरामीटर में ऑब्जेक्ट्स को क्रमबद्ध करने के लिए तंत्र बदल गया है।

और कार्रवाई ~

[HttpPost] 
public ActionResult PostArray(int[] orderedIds) 
{ 
    return Content(orderedIds.Length.ToString()); 
} 
+0

दुर्भाग्य से, यह काम नहीं करता। 'आदेश दिया गया आईडी' नियंत्रक विधि में शून्य है। मुझे संदेह है क्योंकि AJAX वास्तव में 'प्राप्त' करता है? – baron

+1

@baron - मेरे स्थान में, यह ठीक काम करता है। 'आदेश दिया गया आईडी' पैरामीटर नाम – Monday

+1

हमम क्षमा चाहते हैं, आप सही हैं कि यह कोड काम करता है। तो समस्या यह है कि मुझे 'var $ checkRecords = $ (': चेक ') के साथ चेक किए गए आईडी की सरणी कैसे मिल रही है;' जो मुझे 'इनपुट 3, इनपुट 4, इनपुट 5]' देता है जहां मुझे वास्तव में आवश्यकता होती है: ' [1, 2] '। धन्यवाद – baron

0

है आप भी JSON.stringyfy उपयोग कर सकते हैं डेटा भेजा के रूप में एक स्ट्रिंग तो JavaScriptSerializer class का उपयोग डेटा पुनर्प्राप्त करने के लिए।

सी # कोड में, डेटा प्राप्त करने के लिए, इस तरह दिखेगा:

JavaScriptSerializer js = new JavaScriptSerializer(); 

js.Deserialize<T>(string paramiter); 
संबंधित मुद्दे