2014-04-18 3 views
8

का उपयोग कर JSON डेटा स्वीकार करता है मेरे पास एक ऐसी स्थिति है जहां मैं JQuery का उपयोग करके डेटा लोड करने के लिए एएसपी.NET जेनेरिक हैंडलर तक पहुंच रहा हूं। लेकिन चूंकि जावास्क्रिप्ट से लोड किया गया डेटा खोज इंजन क्रॉलर्स को दिखाई नहीं देता है, इसलिए मैंने सी # से डेटा लोड करने का निर्णय लिया और फिर इसे JQuery के लिए कैश किया। मेरे हैंडलर में बहुत तर्क है कि मैं कोड पर दोबारा आवेदन नहीं करना चाहता हूं।एक सामान्य हैंडलर को डेटा भेजें जो सी #

public void ProcessRequest(HttpContext context) 
     { 
      JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
      string jsonString = string.Empty; 

      context.Request.InputStream.Position = 0; 
      using (var inputStream = new System.IO.StreamReader(context.Request.InputStream)) 
      { 
       jsonString = inputStream.ReadToEnd(); 
      } 

      ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString); 
      context.Response.ContentType = "text/plain"; 
      switch (contentType.typeOfContent) 
      { 
       case 1: context.Response.Write(getUserControlMarkup("SideContent", context, contentType.UCArgs)); 
        break; 
      } 
     } 

मैं सी # से समारोह getUserControlMarkup() कॉल कर सकते हैं, लेकिन मैं जब यह बुला कुछ यूआरएल आधारित शर्तें लागू करना होगा: यहाँ मेरी हैंडलर कोड है। contentType.typeOfContent वास्तव में यूआरएल पैरामीटर पर आधारित है।

यदि इस हैंडलर को JSON डेटा भेजना संभव है तो कृपया मुझे बताएं कि यह कैसे करें। मैं इस तरह हैंडलर का उपयोग करने की कोशिश कर रहा हूँ:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata"); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

लेकिन अपनी लाइन पर हैंडलर कोड में NullReferenceException दे रही है: ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

+0

आपका क्या मतलब के बाद से जावास्क्रिप्ट से लोड डेटा खोज इंजन क्रॉलर्स को दिखाई नहीं देता? क्या आपने कुछ आंशिक पृष्ठ या पृष्ठ से भरा अद्यतन करने का प्रयास किया था? – viyancs

+0

याहू जावास्क्रिप्ट से सामग्री को लोड करने की कोशिश कर रहा हूं और मैं यह भी चाहता हूं कि यह खोज इंजनों के लिए दृश्यमान हो, इसलिए मैं इसे कोड से पीछे भी लोड कर रहा हूं। –

+2

चूंकि आप सर्वर साइड पर इसे सी # से कॉल कर रहे हैं, इसलिए आप एक सामान्य हैंडलर के साथ परेशान क्यों हो रहे हैं? क्यों न सिर्फ एक विधि बुलाओ? – mason

उत्तर

2

सुनिश्चित नहीं हैं कि तुम क्यों यह करने के लिए, लेकिन एक HTTP अनुरोध उपयोग करने के लिए एक सामग्री जोड़ना चाहते हैं:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata"); 
     var requestStream = request.GetRequestStream(); 
     using (var sw = new StreamWriter(requestStream)) 
     { 
      sw.Write(json); 
     } 
+0

मुझे 'var requestStream = request.GetRequestStream(); त्रुटि में कोई त्रुटि मिल रही है:' इस क्रिया-प्रकार के साथ सामग्री-सामग्री नहीं भेज सकता। ' –

+0

हल हो गया। यहां समाधान मिला: http://stackoverflow.com/questions/3981564/cannot-send-a-content-body-with-this-verb-type और अब यह काम कर रहा है धन्यवाद :) –

2

आपका समस्या डिव में

  1. लोड सामग्री एएसपी में जावास्क्रिप्ट का उपयोग कर रहा है सी # का उपयोग कर .NET।
  2. खोजें इनके लिए दृश्यमान इंजन

मेरे राय

  1. जब आप आंशिक पृष्ठ अद्यतन कुछ हैंडलर या सेवा सर्वर के लिए अनुरोध के लिए सर्वर और ग्राहक आप अजाक्स का उपयोग कर सकते हैं के बीच संवाद देखते हैं चाहता हूँ।

अगर आप jQuery का उपयोग आप इस समारोह jQuery.ajax(); उदाहरण की कोशिश कर सकते हैं:

    $.ajax({ 
        url:"/webserver.aspx", 
        data:{id:1}, 
        type:'POST', 
        success: function(data) { 
           //do it success function 
         } 
        }) ; 

अगला कदम संहिता में वेब सेवा उत्पन्न आपका ASP.NET के पीछे है कि JSON या XML स्वरूप, के रूप में परिणाम होना चाहिए आप जो कुछ भी सुनिश्चित करें कि आप jQuery.ajax();

यहाँ ASP.NET

    पर वेब सेवा उत्पन्न करने के लिए कुछ संदर्भ की सफलता समारोह में आसानी से पार्स कर सकते हैं बनाने का उपयोग
  • JSON उत्पन्न Web Service ASP.NET

  • पार्स कोड पर Json पीछे Parse JSON Code Behind

  • JSON परिणाम उत्पन्न और क्लाइंट साइड जावास्क्रिप्ट Web Services ASP.NET Json

2.Visible का उपयोग कर खोज इंजन वास्तव में

पार्स मुझे लगता है कि यदि आप खोज इंजन को अपने पेज को इंडेक्स करने की अनुमति देते हैं तो यह कोई समस्या नहीं है, भले ही आपके पास हो कुछ अजाक्स कोड, सर्च इंजन आपके पेज को अनुक्रमणित करेगा।

+0

खोज इंजन दृश्यता मेरी समस्या नहीं है और "div में सामग्री लोड करना मेरी समस्या है"। मेरी समस्या यह है कि मैं जेएसओएन डेटा को हैंडलर को कोड-बैक से भेजना चाहता हूं। –

+0

मुझे लगता है कि सर्वर के पक्ष में कोड पीछे है, यदि आप इसके पीछे कोड में डेटा जेएसओएन भेजना चाहते हैं तो कॉल फ़ंक्शन और पैराम्स के साथ काम करना चाहिए, फिर आपके पैराम JSON प्रकार हैं, और आपके पीछे कोड से उत्पन्न करने के लिए यह ट्यूटोरियल http: //weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx – viyancs

6

ऐसा करने का एक अच्छा तरीका रूटिंग का उपयोग करना है। ग्लोबल में ।asax

protected void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
}   

private void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapHttpHandlerRoute("MyRouteName", "Something/GetData/{par1}/{par2}/data.json", "~/MyHandler.ashx"); 
} 

यह ASP.Net /Something/GetData/XXX/YYY/data.json पर अपने हैंडलर कॉल करने के लिए कह रहा है।

आप हैंडलर में रूट पैरामीटर्स तक पहुंच सकते हैं: context.Request.RequestContext.RouteData.Values["par1"]

क्रॉलर जब तक वे कहीं संदर्भित (यानी रोबोट फ़ाइल या लिंक्स)

+0

अभी भी इसे प्राप्त नहीं करें। मैं इस हैंडलर को कोड-बैक से JSON डेटा कैसे भेज सकता हूं? –

+0

मैंने JSON सामग्री को http अनुरोध में जोड़ने का एक और जवाब जोड़ा। उम्मीद है की यह मदद करेगा। –

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