2010-03-11 16 views
54

मेरी विशेष स्थिति में, मेरे पास मेरी समस्या के कुछ समाधान हैं। मैं यह जानना चाहता हूं कि कौन सा अधिक व्यवहार्य है। इस मामले में, मैं अपने सर्वर साइड कोड से JSON ऑब्जेक्ट लौटकर अपना लक्ष्य भी प्राप्त कर सकता हूं; हालांकि, मुझे नहीं पता कि यह कैसे किया जाता है और यह करने का सबसे अच्छा तरीका क्या है।एएसपी.NET पृष्ठ से JSON ऑब्जेक्ट लौटाना

सबसे पहले, मुझे एक पूर्ण एएसपीएक्स पेज की आवश्यकता नहीं है क्योंकि मुझे केवल कोड से प्रतिक्रिया की आवश्यकता है। तो, क्या मैं वेब सेवाओं, एक हैंडलर का उपयोग करता हूं, या ऐसा करने के लिए कोई अन्य विशिष्ट तरीका है?

क्या यह समाधान संभव है? क्या मैं StringBuilder कक्षा का उपयोग करके JSON स्ट्रिंग का निर्माण करता हूं और उस स्ट्रिंग को लक्षित एएसपीएक्स पृष्ठ में इंजेक्ट करता हूं? क्या कोई सावधानियां या चीजें हैं जिनके बारे में मुझे अवगत होना चाहिए?

मैं आपके विचारों की सराहना करता हूं।

सादर,

कमाल

------------ अद्यतन! ------------

मान लीजिए मैं मेरी userlist.aspx पेज, तो मैं jQuery के साथ उपयोग, जिसमें एक JSON ऑब्जेक्ट ...

{"menu": { 
    "id": "color1", 
    "value": "color", 
    "popup": { 
    "menuitem": [ 
     {"value": "Red"}, 
     {"value": "Green"}, 
     {"value": "Yellow"} 
    ] 
    } 
}} // example taken from the json.org/example page 

अब जब मैं अपने aspx पृष्ठ से नई मेनू आइटम, मैं क्या करूँ ... मुझे लगता है कि जोड़ना चाहते हैं इस तरह मेरी तलाश पर अधिक विशिष्ट है ...

मान लें कि मैं अपने एएसपीएक्स कोड में एक नई स्ट्रिंग बना रहा हूं, जैसे "{"value": "Blue"}। मैं लक्ष्य पृष्ठ में पहले से मौजूद आइटम सूची में इसे कैसे इंजेक्ट कर सकता हूं? या यह इस तरह की स्थिति के लिए सही दृष्टिकोण नहीं है? यदि नहीं, तो यह और कैसे प्राप्त किया जा सकता है?

इसके अलावा, अगर मैं एक jQuery घटना को आग लगाना चाहता था जब इस सूची में कोई नया आइटम जोड़ा जाता है, तो यह कैसे प्राप्त किया जाता है?

------------ 26 पर अद्यतन 2 अगस्त 2015 ------------

समय मैं इस प्रश्न पूछा रखकर रास्ता मैं समस्या का सामना कर रहा था एक और पहलू में था। अब मैं विषय में अधिक कुशल हूं और इस सवाल के दृष्टिकोण से स्पष्ट रूप से सबसे अधिक वोट प्राप्त उत्तर स्वीकार कर सकता हूं क्योंकि स्पष्ट रूप से पहले से मौजूद मौजूदा JSON शामिल नहीं होना चाहिए और @DavGarcia के रूप में कोड से एक नया आउटपुट भी सुझाता है।

उत्तर

108

अपने Page_Load में आप सामान्य उत्पादन को साफ करना चाहते हैं:

public ActionResult GetData() 
{ 
    data = new { Name="kevin", Age=40 }; 
    return Json(data, JsonRequestBehavior.AllowGet); 
} 

यह वापसी डेटा thusly एक ajax कॉल के रूप में JQuery के माध्यम से कहा जा सकता है: यह सब बहुत ही बुनियादी, डिफ़ॉल्ट MVC सामान है और अपने खुद के बारे में, उदाहरण के लिए:

string json = "{\"name\":\"Joe\"}"; 
Response.Clear(); 
Response.ContentType = "application/json; charset=utf-8"; 
Response.Write(json); 
Response.End(); 

JSON करने के लिए आप इस तरह के Json.NET के रूप में एक पुस्तकालय का उपयोग कर सकते एक सी # वस्तु को बदलने के लिए।

इसके बजाय हालांकि उत्पादन JSON करने के लिए अपने .aspx पेज होने का

, एक वेब सेवा (ASMX) या WCF, जो दोनों के कर सकते हैं उत्पादन JSON उपयोग करने पर विचार।

+0

ठीक है मैं अपना प्रश्न अपडेट कर रहा हूं। –

+1

Response.End() को शामिल करने के लिए अद्यतन उत्तर, अन्यथा पृष्ठ नियंत्रण –

+0

प्रस्तुत किया जा सकता है, इस मुद्दे में से एक मुद्दा यह है कि - यदि आपका पृष्ठ जटिल है और इसमें एकाधिक उपयोगकर्ता नियंत्रण हैं और मान लें कि आपके पृष्ठ में से कोई एक कुकी के लिए चेक करता है और यदि यह मौजूद नहीं है, तो इसे सेट करने का प्रयास करता है। यह हमेशा HTTP हेडर भेजे जाने के बाद सर्वर को कुकीज़ संशोधित नहीं कर सकता है 'फेंकने में त्रुटि होगी। –

11

एएसपी के साथ ऐसा कोई समस्या नहीं है .... एमवीसी के साथ ऐसा करना सबसे स्वाभाविक है, लेकिन मानक एएसपी के साथ भी किया जा सकता है।

एमवीसी ढांचे में जेएसओएन के लिए सभी प्रकार की सहायक कक्षाएं हैं, यदि आप कर सकते हैं, तो मैं कुछ एमवीसी-प्यार में मुकदमा चलाने का सुझाव दूंगा, अगर नहीं, तो आप आसानी से एमवीसी द्वारा उपयोग और उपयोग में आसानी से जेएसओएन सहायक वर्ग प्राप्त कर सकते हैं उन्हें एएसपीनेट के संदर्भ में।

संपादित करें:

यहाँ MVC के साथ JSON डेटा वापस जाने के लिए कैसे का एक उदाहरण है। यह आपके नियंत्रक वर्ग में होगा। यह एमवीसी के साथ बॉक्स कार्यक्षमता से बाहर है - जब आप एक नई एमवीसी परियोजना को क्रेट करते हैं तो यह सामान ऑटो-निर्मित हो जाता है, इसलिए यह कुछ खास नहीं है। एकमात्र चीज जो मैं कर रहा हूं वह एक क्रिया को वापस कर रहा है जो जेएसओएन है। जेएसओएन विधि जिसे मैं कॉल कर रहा हूं वह नियंत्रक वर्ग पर एक विधि है।

$.get("/Reader/GetData/", function(data) { someJavacriptMethodOnData(data); }); 
+2

धन्यवाद उत्तर के लिए, मैं MVC उपयोग नहीं कर रहा है, लेकिन अपने जवाब से शुरू अनुसंधान में मिल जाएगा। जबकि मैं ऐसा करता हूं, क्या आप मुझे कुछ संसाधन प्रदान कर सकते हैं जिन्हें आप जानते हैं, अगर कोई है? –

11

ASP.NET वेब पेज के साथ आप एक ही पृष्ठ पर ऐसा कर सकते हैं एक बुनियादी प्राप्त उदाहरण (सरल संभव चीज के रूप में वह काम कर सकते हैं।

var json = Json.Encode(new { 
    orientation = Cache["orientation"], 
    alerted = Cache["alerted"] as bool?, 
    since = Cache["since"] as DateTime? 
}); 
Response.Write(json); 
+3

मुझे यह देखना पड़ा, इसलिए किसी और को यह नहीं पता था कि जेसन ऑब्जेक्ट सिस्टम है। वेब.हेल्पर.जेसन - अगर आप पहले से ही है कि DLL संदर्भ नहीं है, या नहीं, तो आप System.Web.Script.Serialization.JavaScriptSerializer, जो एक ही काम करता है के बारे में उपयोग कर सकते हैं कर सकते हैं। – eselk

+0

@ स्कॉट - यदि आप एक एएसपीनेट पेज पर एक रिकॉर्डसेट के माध्यम से लूपिंग कर रहे थे तो आप उन्हें कैसे समूहित करेंगे (व्यक्तिगत रूप से वे आपके उदाहरण में हैं)? – webdad3

0

तुम्हारे पीछे कोड मिलता है, इस

 MyCustomObject myObject = new MyCustomObject(); 
     myObject.name='try'; 
     //OBJECT -> JSON 
     var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
     string myObjectJson = javaScriptSerializer.Serialize(myObject); 
     //return JSON 
     Response.Clear();  
     Response.ContentType = "application/json; charset=utf-8"; 
     Response.Write(myObjectJson); 
     Response.End(); 

जैसे कुछ का उपयोग करें ताकि आप MyCustomObject के सभी विशेषताओं के साथ एक जेसन ऑब्जेक्ट को क्रमबद्ध कर सकें।

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