2011-10-28 2 views
1

이 코드 유무 :.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.ascxExample.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 전에 실행되지만,

답변

3

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

이 한 페이지/제어 라이프 사이클 문제는 이후의 OnLoad이 실행됩니다 때문에

+0

아 ... 수명주기 문제입니다. 나는 그것에 대해 좀 더 배울 것이라고 생각한다. 나는 또한 MainPage.MainPage()가 호출 될 마지막 메소드 (생성자)라고 생각했다. – markzzz

2

. 순서에서 그들은 불 때

MainPage.MainPage()

iUserControl.iUserControl()

MainPage.OnPreInit()

MainPage.OnLoad()

iUserControl.OnLoad을()

관련 문제