2011-03-19 140 views
7

为什么DisplayUsers();不起作用?Page_Load vs OnLoad

我的基地页:

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()不起作用,

+1

我不太了解使用UI.Page作为基类而不是真正的业务逻辑。这是一个网络演示应用程序。所有的基本逻辑应该与演示文稿分开。 – Independent 2011-03-19 19:38:17

+0

@dingir - 举个例子吧! – eyalb 2011-03-19 19:48:30

+3

使用'PascalCase'命名空间,类型名称等等。您可以稍后感谢我。 – 2011-03-19 19:54:40

回答

16

如果我没有记错,你需要调用基类的OnLoad事件以正确注册Page_Load事件:

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); 
} 

这里有几个不错的读取:

1

在执行的代码,没有什么区别,但

  • AutoEventWireup应该启用(通常以标记)每页
  • Page_Load(和other events这样)使用自动事件订阅mechanism,它使用反射,什么稍微打性能

我个人建议重写OnLoad(),只是不要忘记调用base

3

根据.NET应用程序Performance Tips and Tricks

避免Autoeventwireup功能

不是依靠autoeventwireup,从页面重载的事件。例如,而不是编写Page_Load()方法,请尝试重载public void OnLoad()方法。这允许运行时从每个页面执行CreateDelegate()。