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()
它存储在HttpContext
中myVar
的值;- 之后,我首先在示例中打印它.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,它可以工作。你能帮我解决这个麻烦吗?
http://msdn.microsoft.com/en-us/library/ms178472.aspx
这是一个页/控件生命周期问题。按开火时间顺序:
MainPage.MainPage((
iUserControl.iUserControl((
MainPage.OnPreInit((
MainPage.OnLoad((
iUserControl.OnLoad((
因为 iUserControl 的构造函数将在 MainPage 的 OnPreInit 之前执行,但 OnLoad 将在