2011-10-28 4 views
14

जब मैं इस तरह jQuery के साथ पूर्णांक के की एक सूची भेज:कैसे ASP.net MVC डिफ़ॉल्ट मॉडल बाइंडर के लिए jQuery के साथ पूर्णांक की एक सूची भेजने के लिए

$.ajax('@Url.Action("Execute")', { 
    type: 'POST', 
    data: { 
     pkList: [1,2,3] 
    } 
}); 

फिर jQuery pkList वस्तु को बदलने और द्वारा भेज देंगे इस तरह पोस्ट: यदि सर्वर PHP है

pkList[]:1 
pkList[]:2 
pkList[]:3 

कौन सा ठीक होगा, लेकिन मैं Asp.NET MVC3 का उपयोग करें और डिफ़ॉल्ट मॉडल बांधने की मशीन के साथ इन मूल्यों को प्राप्त करने की कोशिश:

public ActionResult Execute(ICollection<int> pkList) 

लेकिन पीकेलिस्ट हमेशा शून्य है, ऐसा लगता है कि डिफ़ॉल्ट मॉडल बाइंडर इसे बांध नहीं सकता है।

मैं इसे सही तरीके से कैसे हल करूं?


जोड़ासमाधान

मैं jQuery में traditional विकल्प सेट करने के साथ डैरिन दिमित्रोव से समाधान का प्रयोग किया:

$.ajax('@Url.Action("Execute")', { 
    type: 'POST', 
    traditional: true, 
    data: { 
     pkList: [1,2,3] 
    } 
}); 

अब jQuery मापदंडों के [] नहीं जोड़ता है अब और उन्हें इस तरह भेजा जाता है:

pkList:1 
pkList:2 
pkList:3 

और एमवीसी डिफ़ॉल्ट मॉडल बाइंडर मानों को सही तरीके से प्राप्त करता है।

उम्मीद है कि यह किसी की मदद करेगा।

उत्तर

16

आप एक JSON अनुरोध इस्तेमाल कर सकते हैं के रूप में यह आप किसी भी जटिल वस्तुओं आप चाहते हैं भेजने के लिए अनुमति देगा:

$.ajax({ 
    url: '@Url.Action("Execute")', 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ pkList: [1, 2, 3] }), // you could throw any javascript object you like here 
    success: function(result) { 
     // process the results 
    } 
}); 

JSON.stringify विधि आधुनिक ब्राउज़रों में और अगर बनाया गया है आप विरासत का समर्थन करना चाहते ब्राउज़र में आप अपनी साइट पर json2.js स्क्रिप्ट शामिल कर सकते हैं।

और अपने प्रश्न आप jQuery के लिए इंगित करने के लिए के बाद से इस jQuery 1.4 में बदल गया है करने के लिए मापदंडों के पारंपरिक क्रमबद्धता वापस आने की traditional: true विकल्प सेट इस्तेमाल कर सकते हैं और आप बाद के संस्करण का उपयोग कर रहे है अगर आप स्विच करने के लिए संभावना है जवाब देने के लिए जिस तरह से मानकों के धारावाहिक हैं:

$.ajax({ 
    url: '@Url.Action("Execute")', 
    type: 'POST', 
    data: { 
     pkList: [1, 2, 3] 
    }, 
    traditional: true 
}); 
+0

डिफ़ॉल्ट मॉडल बांधने की मशीन भी संभाल नहीं होगा के बारे में अधिक था कॉमा एन्कोडेड डेटा के रूप में अलग-अलग सूचियों को भी सूचीबद्ध करता है? कुछ डेटा की तरह: {pkList: '1,2,3'} '? लेकिन अन्यथा मैं अपने सभी मॉडल क्रमिकरण के लिए इस विधि का उपयोग करता हूं, जेएस में अधिक जटिल वस्तुओं के लिए जाने का तरीका। –

+0

@PaulT।, नहीं, डिफ़ॉल्ट मॉडल बाइंडर 'डेटा स्वीकार नहीं करेगा: {pkList:' 1,2,3 '} '। यदि आप ऐसे अनुरोधों को संभालना चाहते हैं तो एक कस्टम मॉडल बाइंडर आवश्यक होगा जहां आपको प्रविष्टियों को विभाजित करने की आवश्यकता होगी और फिर प्रत्येक को एक पूर्णांक पर वापस पार्स करना होगा।यदि लक्ष्य नियंत्रक कार्रवाई में पूर्णांक की सरणी भेजना है तो इस दर्द से गुजरना आवश्यक नहीं होगा। –

+0

आह हाँ, मैं देखता हूं कि अब आपका क्या मतलब है, बस इसका परीक्षण किया गया है, हालांकि यह अजीब है क्योंकि यदि आपके पास एक ही नाम के साथ दो इनपुट हैं तो यह वास्तव में एक सूची में deserialize है, बस पोस्ट डेटा बनाने के लिए jQuery के serialization उस संभाल नहीं है (यानी । pkList = 1 और pkList = 2 काम करता है) –

0

फिल हैक के पास उनके ब्लॉग पर एक शानदार लेख है जो आपको सीधे दिशा में इंगित करना चाहिए।

Model Binding To A List

+0

धन्यवाद दोस्त, मैं उस से पहले पढ़ा है, लेकिन यह मेरी मदद नहीं करता है, समस्या jQuery पक्ष :) – Marc

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