1

ページに共通のレイアウト (上部のナビゲーション バー、左側のナビゲーション バー、ロゴなど) を持つ ASP.Net 4.0 Web アプリケーションがあります。マスターページはレイアウト部分に最適で、これを使用する予定です。私は Masterpage での作業に慣れていないので、私の計画の多くはまだテスト中です。ただし、ページの HTML をレンダリングする前に実行する必要のある一般的な機能をページに持たせたいと考えています。この機能には、ユーザーがそのページにアクセスできるかどうかのチェックが含まれます。さらに、共通の機能はページごとにわずかに異なります。必要のないページもあります。この機能をマスターページに含めて、要求されたコンテンツ ページに応じて機能を変更することは明らかだと思われるかもしれません。ただし、コンテンツ ページ page_load が起動する前に配置する必要があります。その結果はページのレンダリングに影響するためです。この機能を配置する場所としてベスト プラクティスはありますか? 機能をパラメーター化するにはコンテンツ ページからの情報が必要であることがわかっています。これはすべての前に実行されるため、Masterpage の OnInit() にあることが理想的です。しかし、現時点ではコンテンツ ページから必要な情報を取得できるとは思えません。

どうもありがとうジハード

4

3 に答える 3

0

独自の HttpModule を作成してみることができます。

この議論は役立つはずです

于 2012-11-15T12:51:51.153 に答える
0

MasterPage は、この機能に適した場所ではありません。これに最適な場所は、特別な機能が派生ページにあるカスタム基本ページ クラスです。そうすれば、カスタム クラスを継承し、ページごとに必要な機能を呼び出すことができます。

public class MyCustomPage : System.Web.UI.Page
{
    public bool IsAuthorized(string someCriteria)
    {
        // run special check
    }
}

次に、サイトに個々のページを作成するときに、その継承をSystem.Web.UI.Page独自のクラスに切り替えるだけです。

public class MyNewWebPage : MyNameSpace.MyCustomPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsAuthorized("myCriteria"))
            Response.Redirect("SomewhereElse.aspx");
    }
}
于 2012-11-15T12:51:57.467 に答える
0

ビジネス ロジックに Masterpage (主にレイアウト用) を使用するのではなく、すべてのページが共通の基本クラスから継承されるようにすることをお勧めします。

MasterPageただし、それでもINeedsAuthentication.

MasterPage のInit:

protected void Page_Init(Object sender, EventArgs e)
{
    var page = HttpContext.Current.Handler as Page;
    if (page is INeedsAuthentication)
        checkAuthentication();
    else if (page is WebForm1)
        specialCondition();
    else
        commonCondition(); // for all pages, maybe do simply nothing here
}
于 2012-11-15T12:55:23.563 に答える