2009-12-02 65 views
1

請原諒我,如果這已被問到某處,但我無法弄清楚完成此任務的最佳方法。我希望能夠創建一個渲染系統,使我能夠渲染出數千個不同的.aspx頁面中的內容,而無需創建數千個.aspx頁面。這就是說,我仍然希望能夠渲染出適當的.aspx頁面,如果它存在於我的代碼中的話。來自C#數據庫的動態頁面

例如,當向站點發出請求時,我想檢查該URL是否在數據庫中,如果是,那麼我想適當地呈現內容。但是,如果沒有,那麼我希望它繼續呈現真實的.aspx頁面。

在嘗試使用HTTPModule時,我無法獲取數據庫中存在的頁面以寫出適當的內容。這是我的代碼。

void context_BeginRequest(object sender, EventArgs e) 
    { 
     HttpApplication application = sender as HttpApplication; 
     Uri url = application.Context.Request.Url; 

     //Checks to see if the page exists in the database 
     PageInformation page = PageMethods.GetPageFromUrl(url.AbsolutePath); 

     if (page != null) 
     { 
      string renderedPage = Renderer.RenderPage(page); 
      application.Context.Response.Write(renderedPage); 
     } 
    } 

然而,試圖用一個HttpHandler的時候,我不能因爲*的.aspx動詞正在被處理程序處理的實際.aspx頁正確地呈現。

如果有人對如何徹底重新設計這個有更好的想法,我也完全開放。謝謝。

回答

1

這將這樣的伎倆:

Type page_type = BuildManager.GetCompiledType ("~/page.aspx"); 
Page page = (Page) Activator.CreateInstance (page_type); 
page.ProcessRequest (Context); 
1

我想你lookign一個簡單的URL重寫例子裏面的「正常」的網頁。

所以你有一個單獨的頁面「default.aspx」,可以接受你想要顯示的內容的參數「default.aspx?page = home」,但你不想讓討厭的查詢字符串部分「?頁=家」。

這最好通過URL重寫來解決,它可以用作IIS中的ISAPI模塊。因此,不是上面的URL字符串,人們看到一個名爲「home.aspx」的頁面,Web服務器將其轉換爲您的頁面的「default.aspx?page = home」,以便獲取「主頁」頁面的內容從數據庫中移出並顯示在屏幕上。

這裏有更多信息的頁面上很好地執行這一過程的:

http://www.opcode.co.uk/components/rewrite.asp

相關問題