이 코드 유무 :.cs를 확장하는 aspx.cs 클래스 : 생성자가이 값을 가져올 수없는 이유는 무엇입니까?
MainPage.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"];
}
}
Example.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>
Example.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 />");
}
}
I 측면이 동작 : 나는 example.aspx
전화
- ;
- 을
OnPreInit()
HttpContext
에 저장합니다. 값은myVar
입니다. - 후에, 나는 그것을 인쇄한다 Example.aspx.cs에 첫째로 (그것은 작동한다);
Exz.ascx
Example.aspx
을 포함하면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로, 작동 왜, 난 정말 모르겠어요. 이 문제를 해결하도록 도와 줄 수 있습니까? iUserControl의 생성자 MainPage의 OnPreInit 전에 실행되지만,
아 ... 수명주기 문제입니다. 나는 그것에 대해 좀 더 배울 것이라고 생각한다. 나는 또한 MainPage.MainPage()가 호출 될 마지막 메소드 (생성자)라고 생각했다. – markzzz