web-dev-qa-db-ja.com

Page_LoadとOnLoad

なぜDisplayUsers();が機能しないのですか?

私のベースページは次のとおりです。

_public class adminPage : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        if (User.Identity.IsAuthenticated == false) { Response.Redirect("~/Account/login.aspx?ReturnUrl=/admin"); };
        if (!(User.IsInRole("admin") || User.IsInRole("super user"))) { Response.Redirect("/"); };
    }        
  }
_

私のクラスは

_public partial class users : adminPage
{ 
    protected void Page_Load(object sender, EventArgs e)
    {                        
        string sName;
        adminGeneralData.GetToolData(2, out sName);
        pageH1.Text = sName;

        DisplayUsers();
    }

    protected void DisplayUsers()
    {
        DataSet ds = userData.GetUsersData();
        userList.DataSource = ds;
        userList.DataBind();
    }
}
_

しかし、DisplayUsers()は機能しません、

8
eyalb

正しく思い出せば、Page_Loadイベントを正しく登録するには、基本クラスのOnLoadイベントを呼び出す必要があります。

protected override void OnLoad(EventArgs e)
{
    if (User.Identity.IsAuthenticated == false) { Response.Redirect("~/Account/login.aspx?ReturnUrl=/admin"); };
    if (!(User.IsInRole("admin") || User.IsInRole("super user"))) { Response.Redirect("/"); };

    base.OnLoad(e);
}

ここにいくつかの良い読み物があります:

18
Metro Smurf

パフォーマンスのヒントとコツ によると.NETアプリケーション:

Autoeventwireup機能を回避する

Autoeventwireupに依存する代わりに、Pageからのイベントをオーバーライドします。たとえば、Page_Load()メソッドを作成する代わりに、public void OnLoad()メソッドをオーバーロードしてみてください。これにより、実行時にすべてのページに対してCreateDelegate()を実行する必要がなくなります。

4
Ryszard Dżegan

実行されたコードには違いはありませんが、

  • AutoEventWireupは各ページで有効にする必要があります(通常はマークアップで)
  • _Page_Load_(および その他のイベント このように)は自動イベントサブスクリプションを使用します メカニズム これはReflectionを使用し、パフォーマンスにわずかに影響します

個人的にはOnLoad()をオーバーライドすることをお勧めしますが、baseを呼び出すことを忘れないでください。

1
abatishchev