2009-12-02 62 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

相关问题