2013-04-12 1 views
0

나는 만든 asp.net 테스트 사용자 지정 컨트롤이 간단하고 클릭 이벤트가 발생하지 않는 이유를 파악하려고합니다. 아래는 코드입니다. 나는 단순히 테스트 페이지에서 컨트롤을 소비하는 .aspx 페이지의 Page_Load를 사용하여 컨트롤의 인스턴스를 만듭니다. protected void Page_Load (object sender, EventArgs e) {Page.Form.Controls.Add (new TestControl()); }ASP.NET 사용자 지정 컨트롤 단추 이벤트 발생시 발생하는 문제

페이지가 포스트 백을 수행하지만 사용자 컨트롤에서 클릭 이벤트를 선택하지 않습니다. 특정 패턴 등

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI.WebControls; 
using System.Web.UI; 

namespace WorldOfTest 
{ 
public class TestControl : WebControl { private Button btn; 
protected override void OnInit(EventArgs e) 
{    
    base.OnInit(e); 
} 

protected override void EnsureChildControls() 
{ 
    btn = new Button();   
    this.Controls.Add(btn); 
    base.EnsureChildControls(); 
} 

protected override void CreateChildControls() 
{ 

    btn.Click += new EventHandler(btn_Click); 
    btn.Text = "test button";       
    base.CreateChildControls(); 
} 

void btn_Click(object sender, EventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

protected override void Render(System.Web.UI.HtmlTextWriter writer) 
{ 
    btn.RenderControl(writer); ; 
} 

} } 당신은 페이지의 사용 LoadControl에 사용자 지정 컨트롤을 추가

+0

this.Controls.Add (new TestControl()); 대신 페이지가로드됩니다. PageControls is weird – Machinegon

답변

0

으로이 접근 내가 무엇을 잘못하고있는 중이 야 또는 더 나은 방법을 설명해주십시오.

var control = (TestControl)LoadControl("~/path/to/TestControl.ascx"); 
Page.Form.Controls.Add(control); 
+0

그것은 WebControl이지, UserControl이 아닙니다. –

+0

안녕하세요. WDuffy, 신속한 답장을 보내 주셔서 감사합니다.하지만 내 문제는 사용자 정의 컨트롤을 사용하고 있습니다 ... – user2274963

0

단추가 컨트롤 컬렉션에있는 경우 렌더링을 재정의하고 btn.Render를 호출 할 필요가 없습니다. 나는 또한 그것을 추가하고 이벤트 OnLoad에 가입 할 것이다. 마지막으로 INamingContainer를 구현해야합니다.

protected override void OnLoad(EventArgs e) 
{ 
    btn = new Button(); 
    btn.Click += new EventHandler(btn_Click); 
    btn.Text = "test button"; 
    this.Controls.Add(btn); 
} 
관련 문제