aspx.cs扩展.cs的类:为什么我不能通过构造函数获取此值

本文关键字:cs 构造函数 获取 的类 扩展 为什么 aspx 不能 | 更新日期: 2023-09-27 18:12:33

>我有这个代码:

主页.cs

public class MainPage : System.Web.UI.Page
{
    public string myVar = "";
    public MainPage()
    {
    }
    protected override void OnPreInit(EventArgs e)
    {
        myVar = "Hello";
        HttpContext.Current.Items["myVar"] = myVar;
        base.OnPreInit(e);
    }
}
public class iUserControl : System.Web.UI.UserControl
{
    protected string myVar;
    public iUserControl()
    {
        myVar = (string)HttpContext.Current.Items["myVar"];
    }
}

示例.aspx

<%@ Register src="../context/master/Exz.ascx" tagname="Exz" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <uc1:Exz ID="Exz1" runat="server" />
    </div>
    </form>
</body>
</html>

示例.aspx.cs

public partial class interne_Example : MainPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("First : " + myVar + "<br />");
    }
}

Exz.ascx.cs

public partial class context_master_Exz : iUserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Second : " + myVar + "<br />");
    }
}   

我方面这种行为:

  • 我打电话给example.aspx ;
  • OnPreInit()它存储在HttpContextmyVar的值;
  • 之后,我首先在示例中打印它.aspx.cs(它有效(;
  • 包括来自Example.aspx Exz.ascx,它还应该通过Exz.ascx.cs Response.Write第二次打印该值。 但它打印一个空值!!!

为什么会这样?我看到我可以解决此问题,将iUserControl类编辑为:

public class iUserControl : System.Web.UI.UserControl
{
    protected string myVar;
    public iUserControl()
    {           
    }
    protected override void OnLoad(EventArgs e)
    {
        myVar = (string)HttpContext.Current.Items["myVar"];
        base.OnLoad(e);
    }       
}

但我真的不知道为什么,使用 OnLoad,它可以工作。你能帮我解决这个麻烦吗?

aspx.cs扩展.cs的类:为什么我不能通过构造函数获取此值

http://msdn.microsoft.com/en-us/library/ms178472.aspx

这是一个页/控件生命周期问题。按开火时间顺序:

MainPage.MainPage((

iUserControl.iUserControl((

MainPage.OnPreInit((

MainPage.OnLoad((

iUserControl.OnLoad((

因为 iUserControl 的构造函数将在 MainPage 的 OnPreInit 之前执行,但 OnLoad 将在