2009-06-22 2 views
1

텍스트 상자로 사용자 지정 서버 컨트롤 (WebControl)을 만들려고합니다.ASP.NET WebControl & Page - 동적으로 컨트롤 (TextBox와 같은) 추가하기

CreateChildControls 재정의 사용자 지정 컨트롤에 asp.net 텍스트 상자를 추가합니다. OnInit 재정의에서 TextBox.TextChanged에 이벤트 처리기를 추가합니다.

TextChanged가 실행되지 않는 것을 제외하면 모든 것이 작동합니다. 내가 viewstate 보였다 및 내 텍스트 상자를 viewstate있는 해당 Text 속성을 저장하지 것 같습니다. 나는 생성자를 포함하여 여러 위치에 Text를 설정하려고 시도했지만 아무 것도 작동하지 않습니다.

TextBox를 WebControl에 동적으로 추가하여 viewstate에 Text를 저장하고 TextChanged 이벤트를 발생 시키려면 어떻게해야합니까?

나는 TextBox가 동적으로 추가되고 TextChanged 이벤트가 실행되는 WebControl 코드의 예가 크게 감사 할 것입니다.

+0

우리가 코드를 볼 수 있습니다 여기

는 페이지의 코드 숨김위한 작업 예제? – womp

답변

1

고정 Init 이벤트에 동적 컨트롤을 만들고 추가해야합니다. 특수 ASP.NET 기호가없는 ID를 할당해야합니다 (사용자 지정 ID에 '$'또는 ':'를 입력하면 문제가 해결됩니다). 컨트롤이 컨트롤 트리에 추가 된 후에 모든 속성을 할당해야합니다. 오버라이드 (override)하는 OnInit에서 WebControl 장소 초기화 코드

private readonly TextBox _textBoxTest = new TextBox(); 

protected void Page_Init(object sender, EventArgs e) 
{ 
    this.form1.Controls.Add(_textBoxTest); 
    _textBoxTest.Text = "TestBoxTest"; 
    _textBoxTest.ID = "TestBoxTestId"; 
    _textBoxTest.TextChanged += this._textBoxTest_TextChanged; 
} 

void _textBoxTest_TextChanged(object sender, EventArgs e) 
{ 
    _textBoxTest.Text = "Worked"; 
} 

0

This 당신을 도울 것입니다. 즉, 동적으로 추가 된 컨트롤에 대한 viewstate를 직접 처리해야합니다.

1

동적으로 생성 된 컨트롤은 이벤트가 시작될 때마다 각 포스트 백 (pageInit 이벤트가 더 좋은 옵션 임)에 다시 만들어 져야합니다.

현재 TextChanged 이벤트에서 다시 게시를 생성하려면 컨트롤의 AutoPostback도 true로 설정해야합니다.

+0

생성해야하지만 viewstate도 복원해야합니다. viewstate를 수동으로 처리하지 않으면 페이지가 새 컨트롤로 취급되며 이벤트가 제대로 실행되지 않습니다. – rie819

+1

rie819, 죄송합니다, 나는 많은 시간을 동적으로 생성 된 컨트롤을 사용하고 viewstate를 특별한주의를 기울일 필요가 없으며, 데이터 바인딩과 관련이 있습니까? – tekBlues

+0

TextChange 이벤트가 작동하는 곳에서 페이지 코드 예제를 제공 할 수 있습니까? – Sumrak