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?page = home」を表示するコンテンツの引数を取ることができる単一のページ「default.aspx」がありますが、厄介なクエリ文字列部分「?page=home」は必要ありません。 。

これは、IISでISAPIモジュールとして使用できるURL書き換えによって最もよく解決されます。したがって、上記のURL文字列の代わりに、「home.aspx」というページが表示され、Webサーバーはこれをページの「default.aspx?page = home」に変換して、「ホームページ」ページのコンテンツを取得できるようにします。 DBから取り出して、画面に表示します。

このプロセスの適切な実装に関する詳細情報が記載されたページは次のとおりです。

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 に答える