1

请原谅我是否已经在某个地方问过这个问题,但我无法找出完成这项任务的最佳方法。我希望能够创建一个渲染系统,它允许我从数千个不同的 .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 动词正在由处理程序处理。

如果有人对如何完全重新设计它有任何更好的想法,我也完全愿意接受。谢谢。

4

3 回答 3

1

我认为您正在寻找一个简单的 URL 重写示例。

所以你有一个单页“default.aspx”,它可以接受你想要显示的内容的参数“default.aspx?page=home”,但你不想要讨厌的查询字符串部分“?page=home” .

这最好通过 URL 重写来解决,它可以用作 IIS 中的 ISAPI 模块。因此,人们看到的不是上面的 URL 字符串,而是一个名为“home.aspx”的页面,Web 服务器将其转换为您的页面的“default.aspx?page=home”,它可以获取“主页”页面的内容从数据库中取出并将其显示在屏幕上。

这是一个页面,其中包含有关此过程的良好实施的更多信息:

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

于 2009-12-07T18:15:59.273 回答
1

这可以解决问题:

Type page_type = BuildManager.GetCompiledType ("~/page.aspx");
Page page = (Page) Activator.CreateInstance (page_type);
page.ProcessRequest (Context);
于 2012-08-03T16:53:25.387 回答
0

我相信这显示了如何处理处理程序中的“正常”页面

另一个例子

于 2009-12-02T20:02:47.150 回答