2010-04-08 9 views
5

मैं अपने कार्रवाईआप किसी एमएससी एक्शन पैरामीटर पर JSON ऑब्जेक्ट कैसे पास करते हैं?

public JsonResult Action(int id, string name, bool parameter2, bool parameter3) 
{ 
    //... 
} 

JQueries ajax विधि JSON डेटा पैरामीटर के रूप में उपयोग करते हुए का उपयोग करने के लिए

{"id":1, "name":"stackoverflow", "parameter2":false, "parameter3":true} 

पारित करने के लिए चाहते हैं

$.ajax({ 
    url: "target.aspx", 
    data: {"id":1, "name":"stackoverflow", "parameter2":false, "parameter3":true}, 
    success: handleResponse 
}); 

मैं Fiddler मेरी JSON ऑब्जेक्ट में देख सकते हैं भेजा जा रहा है, लेकिन वे मेरे कार्यों के पैरामीटर के लिए बाध्य नहीं हैं। मैं उन्हें पैरामीटर से बांधने के लिए कैसे प्राप्त करूं?

मैं अपने ऑब्जेक्ट्स पर किसी ऑब्जेक्ट पर बाध्य नहीं करना चाहता, जिसमें मेरा मान शामिल है, यानी मैं एक्शन (MyCustomObjectToAcceptParameters जेसन) नहीं चाहता हूं, मैं चाहता हूं कि प्रत्येक JSON प्रॉपर्टी कार्रवाई के प्रत्येक पैरामीटर से जुड़ जाए।

यदि मैं अपने पैरामीटर को क्वेरीस्ट्रिंग के रूप में पास करता हूं, तो सबकुछ काम करता है, लेकिन JSON क्वेरीस्ट्रिंग मानों के समूह की तुलना में निर्माण/रखरखाव करना बहुत आसान है, इसलिए मैं अपने जेसन को लेना चाहता हूं और इसे अपने क्रिया पर प्रत्येक पैरामीटर से जोड़ना चाहता हूं। मुझे जटिल प्रकारों को डेटामेम्बर, बस साधारण तार, स्याही और बुलियन के साथ बांधने की आवश्यकता नहीं है।

+0

क्या आप अपना वर्तमान jQuery कॉल कोड पोस्ट कर सकते हैं? – tzaman

+0

क्या आपने चर नामों के उद्धरण के बिना इसे आजमाया है? @ रयान का जवाब देखें। ऐसा करना चाहिए जो आप चाहते हैं (यदि मैं इसे सही ढंग से समझ रहा हूं) – SlackerCoder

उत्तर

2

मुझे लगता है कि @womp ने मेरी प्रतिक्रिया के आधार पर अपना उत्तर हटा दिया है, तो यहां समाधान है। आप एक JSON ऑब्जेक्ट डेटा पैरामीटर के रूप में पास कर सकते हैं। उदाहरण के लिए here देखें।

$.ajax({ 
    url: "target.aspx", 
    data: {parameter1: true, parameter2: false, parameter3: true}, 
    success: handleResponse 
}); 
+0

यदि आपने यह किया है, तो क्या आप यह पुष्टि करने के लिए फ़ायरबग का उपयोग कर सकते हैं कि पैरामीटर वास्तव में अनुरोध में हैं? या आप अपने नियंत्रक में ब्रेकपॉइंट सेट कर सकते हैं और HttpContext की जांच कर सकते हैं। – Ryan

+0

इस प्रकार मैं अपने पैरामीटर को पार कर रहा हूं, लेकिन मैं उन्हें अपने क्रिया पैरामीटर (क्रिया पैरामीटर की वस्तु नहीं) से कैसे बांध सकता हूं; – TimTam

+1

क्या आप डिफ़ॉल्ट मॉडल बाइंडर का उपयोग कर रहे हैं? यह सिर्फ काम करना चाहिए। – Ryan

0

womp आप अच्छा जवाब दिया, लेकिन अगर आप कई कार्यों पर ऐसा करने की जरूरत है या आप और अधिक उन्नत जटिल ऑब्जेक्ट के लिए बाध्य करना चाहते हैं, thise लेख में मदद कर सकते हैं:

को लागू कस्टम फ़िल्टर: http://blogger.forgottenskies.com/?p=252

कस्टम का उपयोग करना मॉडल बाइंडर: http://community.codesmithtools.com/blogs/tdupont/archive/2009/08/10/mvc-custom-json-binder.aspx

0

बांधने वाला/फ़िल्टर उत्कृष्ट है। जेसन नाम मैपिंग पर बेहतर नियंत्रण के लिए < -> व्यवसाय वर्ग गुण, [डेटामेम्बर] गुणों पर विशेषता, और [डेटाकंट्रैक्ट] कक्षा पर उपयोग करें। DataContractJsonSerializer देखें।

+0

नहीं होता है यह किसी ऑब्जेक्ट पर गुणों के लिए बाध्यकारी जैसा दिखता है। मैं कार्रवाई के पैरामीटर से बांधना चाहता हूं (इसलिए मुझे दूसरी वस्तु बनाने की आवश्यकता नहीं है) – TimTam

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