2009-01-25 6 views
6

में प्रोग्राम.बैब.यूआई.पेज प्रोग्रामेटिक रूप से बनाना, मैं यूआरएल की सामग्री के आधार पर कस्टम पेज बनाने के लिए एएसपी.NET (3.5) "रूटिंग मॉड्यूल" कार्यक्षमता का उपयोग करने की कोशिश कर रहा हूं। इसी प्रकार केIHTTPHandler

विभिन्न लेख,: ASP.NET रूटिंग उपयोग करने के लिए कैसे वेब सर्वर पर मौजूदा पृष्ठों के लिए शाखा समझाने http://blogs.msdn.com/mikeormond/archive/2008/05/14/using-asp-net-routing-independent-of-mvc.aspx

मैं क्या करना चाहता हूं कोड का उपयोग कर ऑन-द-फ्लाई पृष्ठ बनाना है।

मेरा पहला प्रयास इस तरह दिखता है:

public class SimpleRouteHandler : IRouteHandler 
{ 

    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     string pageName = requestContext.RouteData.GetRequiredString("PageName"); 

     Page myPage = new Page(); 
     myPage.Response.Write("hello " + pageName); 
     return myPage; 

    } 

} 

लेकिन यह एक HttpException कह फेंकता है "प्रतिक्रिया इस संदर्भ में उपलब्ध नहीं है।" Response.Write कथन पर।

आगे बढ़ने के तरीके पर कोई विचार?

अद्यतन: अंत में, मैं आईएचटीपी मॉड्यूल पर आधारित एक दृष्टिकोण के साथ गया, जो कि आसान हो गया।

उत्तर

1

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

Page myPage = new Page(); 
page.Controls.Add(new LiteralControl("hello " + pageName)); 
return myPage; 

यह मुझे स्पष्ट नहीं है कि इसमें आवश्यक HTML, HEAD, और बॉडी टैग होंगे। बेस पेज बनाने के लिए बेहतर हो सकता है जिसमें कंकाल मार्कअप है जिसमें आप अपने नियंत्रण को जोड़ सकते हैं और BuildManager का उपयोग इस पृष्ठ को तुरंत चालू करने के लिए उदाहरण में कर सकते हैं, फिर अपने नियंत्रण जोड़ें। Response.Write से पहले

1

रखें requestContext, तो requestContext.Response.Write

8

आप एक IRouteHandler से जवाबी कार्रवाई के लिए नहीं लिख सकते हैं - यह बहुत अनुरोध जीवन चक्र के दौरान जल्दी है। आपको केवल IHttpHandler के भीतर से प्रतिक्रिया को लिखना चाहिए, जो Page है।

जैसा कि अन्य उदाहरणों में दिखाया गया है, आपको कहीं से एक पृष्ठ उदाहरण प्राप्त करना होगा जिसमें सभी आवश्यक सामग्री हो।

Page p = (Page)BuildManager.CreateInstanceFromVirtualPath("~/MyPage.aspx"); 

या आप स्क्रैच से एक बना सकते हैं:

यहां आपके द्वारा किसी मौजूदा पृष्ठ लोड कर सकते हैं

Page p = new Page(); 
p.Controls.Add(new LiteralControl(
    @"<html> 
     <body> 
      <div> 
       This is HTML! 
      </div> 
     </body> 
     </html>")); 
+0

मैं बस आपको सुझाव दे 'BuildManager.CreateInstanceFromVirtualPath' के लिए धन्यवाद देना चाहता था। इससे मुझे उस चीज़ पर बहुत मदद मिली जिस पर मैं काम कर रहा था। –

+0

पेज पी = (पेज) BuildManager.CreateInstanceFromVirtualPath ("~/MyPage.aspx", टाइपऑफ (पेज)); –

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