2008-11-10 18 views
7

मुझे क्लाइंट को भेजे जाने से ठीक पहले एएसपी.NET के HTML को पकड़ने की आवश्यकता है ताकि अंतिम मिनट स्ट्रिंग मैनिप्लेशंस करने के लिए, और उसके बाद संशोधित संस्करण क्लाइंट को भेजें।ASP.NET क्लाइंट को भेजे जाने से पहले किसी पृष्ठ के HTML को संशोधित करने से पहले

ईजी।

पृष्ठ भरी हुई है हर नियंत्रण सही ढंग से गाया कर दिया गया है पेज के पूर्ण HTML ग्राहक

वापस करने के लिए स्थानांतरित किया के लिए तैयार है वहाँ ASP.NET

+0

दोस्त, हर किसी को मत छोड़ो जो आपको बिल्कुल नहीं बताता कि आप उनकी प्रतिक्रिया में क्या सुनना चाहते हैं। अधिक लोगों को आपकी मदद करने के लिए प्रोत्साहित करने का यह एक अच्छा तरीका नहीं है। मुझे नहीं लगता कि मैंने कभी भी एक ही प्रश्न में इतने सारे लोगों को गिरा दिया है। –

+0

वह ऐसा नहीं हो सकता है जिसने किया ... शायद वह हो सकता है, लेकिन कौन जानता है? –

+2

नहीं मैंने इसे नहीं किया है –

उत्तर

8

आप अपने पृष्ठ की रेंडर विधि को ओवरराइड कर सकते हैं। फिर बेस कार्यान्वयन को कॉल करें और अपनी HtmlTextWriter ऑब्जेक्ट की आपूर्ति करें। यहाँ एक उदाहरण

protected override void Render(HtmlTextWriter writer) 
{ 
    StringWriter output = new StringWriter(); 
    base.Render(new HtmlTextWriter(output)); 
    //This is the rendered HTML of your page. Feel free to manipulate it. 
    string outputAsString = output.ToString(); 

    writer.Write(outputAsString); 
} 
+0

बस पता चला है कि 'अपडेटपेनल' का उपयोग करते समय आपके दृष्टिकोण का उपयोग एएसपी.NET अजाक्स को तोड़ता है जावास्क्रिप्ट त्रुटि "[सर्वर से प्राप्त संदेश को पार्स नहीं किया जा सकता]] (http: // weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how-to-avoid-it.aspx) "। –

2

आप में है कि करने के लिए एक रास्ता है एचटीएमएल बदलने के लिए HTTPModule का उपयोग कर सकते हैं। यहां एक sample है।

0

एएसपी.नेट पृष्ठ के जीवन चक्र में घटनाओं के अनुक्रम पर एक नज़र डालें। Here's एक पृष्ठ जो घटनाओं को सूचीबद्ध करता है। यह संभव है कि आप अपने परिवर्तन करने के लिए पृष्ठ के जीवन चक्र में पर्याप्त देर से संभालने के लिए एक ईवेंट पा सकें, लेकिन फिर भी उन परिवर्तनों को प्राप्त करें।

यदि नहीं, तो आप हमेशा एक HttpModule लिख सकते हैं जो पृष्ठ के बाद ही HTTP प्रतिक्रिया को संसाधित करता है।

-1

मुझे नहीं लगता कि उस पृष्ठ से एक विशिष्ट घटना है जिसमें आप हुक कर सकते हैं; यहां एएसपी.Net जीवन चक्र है: http://msdn.microsoft.com/en-us/library/ms178472.aspx

आप नियंत्रण के मूल्यों को 'समायोजित' करने के लिए प्रीरेंडर ईवेंट में हुकिंग पर विचार करना चाहेंगे, या कुछ क्लाइंट साइड संपादन/कॉलबैक कर सकते हैं।

0

स्पष्ट रूप से यह अधिक कुशल होगा यदि आप पहले स्थान पर एएसपी.Net से वांछित मार्कअप को जोड़ सकते हैं।

इस बात को ध्यान में रखते हुए, क्या आपने Control Adapters का उपयोग करने पर विचार किया है? वे बाद में स्ट्रिंग को संशोधित करने के बजाय, आपके प्रत्येक नियंत्रण को पहले स्थान पर कैसे प्रस्तुत करते हैं, इस बारे में अधिक सवारी करने की अनुमति देंगे।

0

का उपयोग करते हुए कुछ दिनों के लिए answer of Atanas Korchev, मुझे पता चला कि मैं JavaScript त्रुटियों के लिए इसी तरह मिलता है:

"सर्वर से प्राप्त संदेश पार्स नहीं किया जा सकता है"

एएसपी.NET अजाक्स UpdatePanel control के संयोजन के साथ इसका उपयोग करते समय। The reason is described in this blog post

मूल रूप से UpdatePanel प्रस्तुत की गई स्ट्रिंग की सटीक लंबाई के बारे में महत्वपूर्ण लगता है। अर्थात। यदि आप स्ट्रिंग को बदलते हैं और लंबाई रखते हैं, तो यह सफल होता है, यदि आप टेक्स्ट बदलते हैं तो स्ट्रिंग की लंबाई बदलती है, उपर्युक्त जावास्क्रिप्ट त्रुटि होती है।

मेरे नहीं सही, लेकिन काम समाधान UpdatePanel हमेशा एक पोस्ट करता है मान लेते हैं और कि दूर फिल्टर करने के लिए किया गया था:

protected override void Render(HtmlTextWriter writer) 
{ 
    if (IsPostBack || IsCallback) 
    { 
     base.Render(writer); 
    } 
    else 
    { 
     using (var output = new StringWriter()) 
     { 
      base.Render(new HtmlTextWriter(output)); 

      var outputAsString = output.ToString(); 
      outputAsString = doSomeManipulation(outputAsString); 

      writer.Write(outputAsString); 
     } 
    } 
} 

यह मेरी स्थिति में काम करता है लेकिन कुछ कमियां है कि अपने परिदृश्य के लिए काम नहीं कर सकता है :

  • पोस्टबैक पर, कोई स्ट्रिंग नहीं बदली जाती है।
  • उपयोगकर्ता जिस स्ट्रिंग को देखता है वह अनियमित एक
  • UpdatePanel गैर-पोस्टबैक के लिए भी आग लग सकता है।

फिर भी, मुझे आशा है कि इससे अन्य लोगों की मदद मिलती है जो समान समस्या का पता लगाते हैं। इसके अलावा, see this article discussing UpdatePanel and Page.Render in more details

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