How to Execute Page_Load() in Page's Base Class?

后端 未结 6 846
不知归路
不知归路 2020-12-24 05:56

I have the following PerformanceFactsheet.aspx.cs page class

public partial class PerformanceFactsheet : FactsheetBase
{
    protected void Page_Load(object         


        
相关标签:
6条回答
  • 2020-12-24 06:34

    We faced the similar problem, All you need to do is just register the handler in the constructor. :)

    public class FactsheetBase : System.Web.UI.Page 
    { 
    
        public FactsheetBase()
        {
            this.Load += new EventHandler(this.Page_Load);
        }
    
        public MyPageData Data { get; set; }  
        protected void Page_Load(object sender, EventArgs e) 
        { 
            // get data that's common to all implementors of FactsheetBase 
            // and store the values in FactsheetBase's properties 
            this.Data = ExtractPageData(Request.QueryString["data"]);             
        } 
    }
    

    Another approach would be to override OnLoad() which is less preferred.

    public class FactsheetBase : System.Web.UI.Page 
    { 
    
        public FactsheetBase()
        {
        }
    
        public MyPageData Data { get; set; }  
        protected override void OnLoad(EventArgs e)
        {
            //your code
            // get data that's common to all implementors of FactsheetBase 
            // and store the values in FactsheetBase's properties 
            this.Data = ExtractPageData(Request.QueryString["data"]);             
    
            base.OnLoad(e);
        }
    }
    
    0 讨论(0)
  • 2020-12-24 06:35

    try this one

     public partial class PerformanceFactsheet : FactsheetBase
    {
        public PerformanceFactsheet()
        {
            this.Load += new EventHandler(this.Page_Load);
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {            
            divPerformance.Controls.Add(this.Data);
        }
    }
    
    public abstract class FactsheetBase : System.Web.UI.Page
    {
        public MyPageData Data { get; set; }
        public FactsheetBase()
        {
            this.Load += new EventHandler(this.Page_Load);
        }
    
        new protected void Page_Load(object sender, EventArgs e)
        {            
            this.Data = ExtractPageData(Request.QueryString["data"]);
        }
    }
    
    0 讨论(0)
  • 2020-12-24 06:39

    Make the page load public, and call it in a manner like this from the other page:

    this.myPageOrUserControl.Page_Load(null, EventArgs.Empty);
    
    0 讨论(0)
  • 2020-12-24 06:40

    Uhm, I maybe wrong, but I believe this is due to inheritance: you are overwriting the FactsheetBase Page_Load method in the derived class.

    In order to have it executed you should do something like

    public partial class PerformanceFactsheet : FactsheetBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load( sender, e );
            // do stuff with the data extracted in FactsheetBase
            divPerformance.Controls.Add(this.Data);
        }
    }
    

    EDIT: n8wrl definitely gave you a cleaner solution (I am not a ASPX programmer).

    0 讨论(0)
  • 2020-12-24 06:46

    Instead of a Page_Load() method, override OnLoad() and call base.OnLoad() in PerformanceFactsheet

    0 讨论(0)
  • 2020-12-24 06:53

    try this one:

         public partial class PerformanceFactsheet : FactsheetBase
    {
        protected override void Page_Load(object sender, EventArgs e)
        {
    base.Page_Load(sender, e);
            // do stuff with the data extracted in FactsheetBase
            divPerformance.Controls.Add(this.Data);
        }
    }
    
    public class FactsheetBase : System.Web.UI.Page
    {
        public MyPageData Data { get; set; } 
        protected virtual void Page_Load(object sender, EventArgs e)
        {
            // get data that's common to all implementors of FactsheetBase
            // and store the values in FactsheetBase's properties
            this.Data = ExtractPageData(Request.QueryString["data"]);            
        }
    }
    
    0 讨论(0)
提交回复
热议问题