3

ASPX ファイルを時々スワップ アウト/置換/オーバーライドできるようにしたいと考えています。これがシナリオです。

ASP.NET で作成されたポータルがあり、データの表示、レコードの更新、レポートなどのために、すでに大量のページがあります。一部のクライアントは「非常に重要」であるため、特定のページをクライアント専用にカスタマイズできるようにする必要があります。そのため、クライアントがログインすると、クライアント用にカスタマイズされたページが表示されます。

マスター ページは優れています。ヘッダーやフッターなどをカスタマイズできますが、特定の領域を非表示にしたり、完全に移動したりしたい場合があります。マスター ページではそれができません。

テーマ/スキンは CSS に適しており、コントロールの動作を変えることができますが、これによって特定のページを完全に再編成することはできません。

だから私はコードを書くことができるようにしたいと思っています。それ以外の場合は、既に存在する .aspx を使用してください。」

つまり、サーバー上に「特別なクライアント」ごとに、デフォルトを上書きする奇妙な .aspx ファイルを含むディレクトリを作成できます。

どうすればこれを達成できますか?

どうもありがとうニック

4

2 に答える 2

3

これを行うには、ファイルを処理するページ ファクトリを登録する必要があり.aspxます。したがって、最初に拡張する新しいクラスを作成しますPageHandlerFactory

public class MyPageFactory : PageHandlerFactory
{
    public override IHttpHandler GetHandler(
        HttpContext httpContext, string requestType, string url, 
        string pathTranslated)
    {
        // Here you can inspect `HttpContext` and perform whatever checks you
        // need to determine whether or not to use your custom overridden page.
        if (shouldOverride) 
        {
            var newVirtualPath = "/Overrides/Foo/MyPage.aspx";
            string newFilePath = httpContext.Server.MapPath(newVirtualPath);

            // Now create the page instance
            IHttpHandler page = PageParser.GetCompiledPageInstance(newVirtualPath, newFilePath, httpContext);
            return page;
        }
        else 
        {
            // If we're not overriding, just return the default implementation
            return base.GetHandler(httpContext, requestType, url, pathTranslated);
        }
    }
}

web.config(IIs7)に登録することを忘れないでください:

<system.webServer>
    <httpHandlers>
        <add verb="*" path="*.aspx" type="MyPageFactory" />
    </httpHandlers>
</system.webServer>

または < IIS7:

<system.web>
    <httpHandlers>
        <add verb="*" path="*.aspx" type="MyPageFactory" />
    </httpHandlers>
</sysetm.web>
于 2012-05-16T17:58:54.383 に答える
1

特定の情報を表示するクライアントのタイプを識別するメカニズムがデータベースにあると思いますか?

いずれにせよ、あなたが話しているのは、CMSのような機能を提供しているようです。この機能では、コンテンツをユーザーのタイプなどに特化できます。ページをオーバーライドしてスワップアウトするのではなく、可能ですが、非常に複雑で、XMLまたはデータベースを使用してページの特定の領域のコンテンツを保存し、ユーザーがページにアクセスしたときにそれらの領域をプルします。

次に、ページの領域をユーザーの役割に関連付けることができます(すべてがデータベースにある場合)。次に、必要に応じて、特定の役割がコンテンツをカスタマイズできるようにすることもできます。

于 2012-05-16T18:18:19.193 に答える