2009-03-15 21 views
9

में एएसपीएक्स पेज को प्रस्तुत करना मेरे वेब प्रोजेक्ट के व्यवसाय ऑब्जेक्ट एडिटर पेज में, मैं ऑब्जेक्ट डालने या अपडेट करने के बाद व्यवस्थापक को एक अधिसूचना ईमेल भेज रहा हूं। लेकिन एक सादा पाठ मेल भेजने की बजाय, मैं इस उद्देश्य के लिए बस एक और एएसपीएक्स पेज (अधिसूचना.एएसपीएक्स) के एचटीएमएल आउटपुट भेजना चाहता हूं।किसी अन्य

सबसे पहले मैंने सोचा, मैं अधिसूचना.एएसपीएक्स का एक उदाहरण बना सकता हूं, फिर आउटपुट प्राप्त करने के लिए इसकी रेंडरकंट्रोल विधि का उपयोग कर सकता हूं।

हालांकि, Editor.aspx पृष्ठ के कोडबींड में, मैं एक नया उदाहरण बनाने के लिए अधिसूचना के संदर्भ तक भी नहीं पहुंच सकता।

मुझे आश्चर्य है कि लोड हो रहा है और एक और एक में एक पृष्ठ प्रतिपादन के लिए सबसे अच्छा अभ्यास ...

धन्यवाद क्या है।

उत्तर

24

आप ऐसा करके एक पृष्ठ प्रदर्शित कर सकते हैं:

StringWriter _writer = new StringWriter(); 
HttpContext.Current.Server.Execute("MyPage.aspx", _writer); 

string html = _writer.ToString(); 
+1

मुझे लगता है कि अधिभार के बारे में कभी नहीं जानता था। बाहर निकलता है जो एक IHttpHandler लेता है - जो आपको पेज इवेंट्स की सदस्यता लेने और प्रतिपादन से पहले आउटपुट को संशोधित करने की अनुमति देगा। बहुत अच्छा है, और नीचे मेरे ईमेल पेज हैंडलर कोड को काफी सरल बनाता है। +1 –

+0

धन्यवाद। जिसने चाल को सबसे सरल तरीके से बनाया :) अब मुझे आश्चर्य है कि क्या मैं इस प्रक्रिया को असंकालिक रूप से कर सकता हूं? क्योंकि मेल बॉडी के एचटीएमएल – koraytaylan

+0

उत्पन्न करने में कुछ समय लगता है, मैं एक नया थ्रेड बनाकर ऐसा करूँगा, एक विधि में रेंडर कोड डालें। और नए थ्रेड में विधि निष्पादित करें। – MartinHN

0

यह प्रश्न/उत्तर देखें: Can I set up HTML/Email Templates in C# on ASP.NET?। मार्क ब्रैकेट में जो भी आप खोज रहे हैं, वहीं वहां कई अन्य सहायक सलाह भी हैं।

0

अनुरोध करते समय पृष्ठ कक्षा एएसपी.NET रनटाइम द्वारा तुरंत चालू की जाती है। तो आप एक अनुरोध कर सकते हैं और प्रतिक्रिया प्राप्त कर सकते हैं:

using (WebClient client = new WebClient()) 
using (Stream stream = client.OpenRead("http://mysite.com/notification.aspx")) 
using (StreamReader reader = new StreamReader(stream)) 
{ 
    var contents = reader.ReadToEnd(); 
} 
0

मुश्किल लगता है। ध्यान रखें कि पृष्ठ को सही ढंग से प्रस्तुत करने के लिए, उचित HttpContext की आवश्यकता होगी।

मैं इसके बजाय UserControl का उपयोग करने पर विचार करता हूं। इन्हें आसानी से लोड किया जा सकता है और Page.LoadControl() विधि के साथ प्रस्तुत किया जा सकता है। थोड़ी सी चीजें-पोकरी के साथ, आप इसे HTML में निकालने के दौरान पृष्ठ में प्रतिपादन से रोक सकते हैं।

0

RenderControl, काम नहीं करेगा क्योंकि पृष्ठ के माध्यम से यह जीवन चक्र है नहीं जाएगी। मैंने एक समान उद्देश्य के लिए अतीत में धारा को पकड़ने के लिए एक HttpHandler और एक प्रतिक्रिया का उपयोग किया है। फ़िल्टर। मैंने ASP.NET forums previously पर कोड पोस्ट किया है।

संपादित करें: यदि आपको पृष्ठ आउटपुट को संशोधित करने की आवश्यकता है, तो आपको इसे Server.Execute अधिभार pointed out मार्टिनएनएच द्वारा संयोजित करना चाहिए। यह कोड को सरल बना देगा, प्रतिक्रिया को हटा देगा। फ़िल्टर और ऐसे। यदि आप सीधे पृष्ठ आउटपुट चाहते हैं, तो मार्टिनएनएच की विधि बहुत साफ़ है।

0

यह आपके लिए क्या देख रहा है:

Type t = BuildManager.GetCompiledType("~/mypage.aspx"); 
Page p = (Page)Activator.CreateInstance(t); 
p.ProcessRequest(HttpContext.Current); 

यहां से अपनी कल्पना का उपयोग करें ....

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