2012-08-03 4 views
0

"개체 참조가 개체 인스턴스로 설정되지 않았습니다."오류가 발생합니다. 약자의 이익을 위해 단축 모든 것을 내려 :사용자 정의 컨트롤에서 웹 컨트롤에 사용자 컨트롤의 생성자에서 액세스

의 .ascx 파일 :

<asp:Label ID="lblcategory" runat="server" Text="Label"></asp:Label> 

.ascx.cs 파일 : 다음

public partial class NewsArticleContainer : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    }  

    public NewsArticleContainer() 
    { 
     lblcategory.Text = "hello there!"; //null reference exception 
    } 
} 

, 내가 이러는거야 web.config 파일에 등록한 후 다른 페이지로 사용자 제어.

에서 .aspx 파일 :

<MyUC:NewsArticleContainer runat="server"/> 

내가를 Page_Load에서 lblcategory.Text = "hello there!" 줄을 추가하고 생성자에서 그것을 언급하는 경우, 그것은 잘 작동합니다. 그러나 나중에이 사용자 정의 컨트롤의 인스턴스를 프로그래밍 방식으로 추가 할 수 있습니다 (예 : mypanel.Controls.Add(new NewsArticleContainer(x)), 여기서 x는 NewsArticle 임).

저는 사용자 정의 컨트롤을 사용하기 위해 LoadControl을 사용해야한다는 것을 이미 알고 있습니다. 그게 문제가 아닙니다. 문제는 사용자 정의 컨트롤의 생성자에서 웹 컨트롤에 액세스 할 수 없다는 것입니다.

이 글을 쓰는 동안 나는 단지 : 사용자 정의 컨트롤의 경우 Page_Load가 클래스의 인스턴스를 만드는 전통적인 의미의 생성자와 같을 수 있으며 전통적인 생성자 UserControl의 공용 ClassName()을 건드리지 않거나 수정해서는 안됩니까?

+0

먼저 멤버 변수에 값을 저장 한 다음로드시 label.text에 멤버 변수를 할당 해 보았습니까? –

답변

3

글쎄요, 당신은 여기서 어떤 것을 이해해야합니다. UserControl은 클래스이지만 컨트롤에는 자체 수명주기가 있습니다. 개별 컨트롤은 페이지 수명주기/컨트롤 수명주기의 초기화가 호출 된 후에 만 ​​사용할 수 있습니다. Init 앞에는 고유 한 ID가 할당되어 있지 않으므로 초기화되지 않습니다. 그래서 개체 참조 오류가 발생합니다. 당신이 여기에서 할 수있는 것은

public partial class NewsArticleContainer : System.Web.UI.UserControl 
{ 
    List<string> NewsArticle = null; 
    public NewsArticleContainer(List<string> toCreateNewsArticle) 
    { 
     NewsArticle = toCreateNewsArticle; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     foreach(string s in NewsArticle) 
     { 
      //dynamically create your label control and add it to this user control 
      Label lb = new Label; 
      lb.Text = s; 
      this.Controls.Add(lb); 
     } 
    } 
} 

입력에 합격하여 클래스 레벨의 변수에 NewsArticle를 저장 follwing을 같이한다. 그런 다음 페이지로드 또는 page_init에서 동적으로 라벨을 만들고 컨트롤에 추가하십시오.

+0

오른쪽 페이지 이벤트 (OnLoad, OnRender 등) http://msdn.microsoft.com/en-us/library/ms178472.aspx – ASpirin

+1

대단히 감사합니다! – CptSupermrkt

관련 문제