请原谅我,如果已经在某处问过这个问题,但我无法找到完成这项任务的最佳方法。我希望能够创建一个渲染系统,允许我从数千个不同的.aspx页面中呈现内容,而无需创建数千个.aspx页面。话虽这么说,我仍然希望能够呈现出适当的.aspx页面,如果它存在于我的代码中。
例如,当向站点发出请求时,我想检查并查看该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动词正由处理程序处理。
如果有人对如何完全重新设计这个有更好的想法,我也完全对此持开放态度。感谢。
答案 0 :(得分:1)
我认为你是一个简单的URL重写示例。
所以你有一个单独的页面“default.aspx”,它可能会显示你想要显示的内容的参数“default.aspx?page = home”,但是你不想要讨厌的查询字符串部分“?page =家”。
这最好通过URL重写来解决,它可以在IIS中用作ISAPI模块。因此,人们看到一个名为“home.aspx”的页面而不是上面的URL字符串,并且Web服务器将其转换为您的页面的“default.aspx?page = home”,可以获取“home”页面的内容超出数据库并将其显示在屏幕上。
这是一个页面,其中包含有关此流程良好实施的更多信息:
答案 1 :(得分:1)
这样可以解决问题:
Type page_type = BuildManager.GetCompiledType ("~/page.aspx");
Page page = (Page) Activator.CreateInstance (page_type);
page.ProcessRequest (Context);
答案 2 :(得分:0)
我相信这显示了如何处理处理程序中的“普通”页面