문제

텍스트 상자를 사용하여 사용자 정의 서버 컨트롤 (WebControl)을 만들려고합니다.

CreateChildControls Override의 사용자 정의 컨트롤에 ASP.NET TextBox를 추가합니다. Oninit Override에서는 TextBox.TextChanged에 이벤트 핸들러를 추가합니다.

그 텍스트 교체를 제외하고는 모든 것이 작동하지 않습니다. 나는 ViewState를 보았고 내 TextBox가 ViewState에 텍스트 속성을 절대 저장하지 않는 것처럼 보입니다. 생성자를 포함하여 다양한 장소에서 텍스트를 설정하려고했지만 아무것도 작동하지 않습니다.

TextBox가 WebControl에 동적으로 추가하여 ViewState에 텍스트를 저장하고 TextChanged 이벤트를 발사 할 수있는 방법은 무엇입니까?

TextBox가 동적으로 추가되고 TextChanged 이벤트가 발사되는 WebControl 코드의 예에 크게 감사드립니다.

도움이 되었습니까?

해결책 2

고쳤다. 이벤트에서 동적 컨트롤을 작성하고 추가해야합니다. 특수 ASP.NET 기호없이 ID를 할당해야합니다 ( '$'또는 ':'내부 사용자 정의 ID는 물건을 깨뜨립니다). 컨트롤 트리에 컨트롤이 추가 된 후 모든 속성을 할당해야합니다.

다음은 Page CodeBehind의 작업 예입니다.

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";
}

WebControl Place의 경우 Oninit Override의 Init Code

다른 팁

이벤트를 발사하려면 각 게시물에서 동적으로 생성 된 컨트롤이 각 게시물에서 다시 생성되어야합니다 (PageInit 이벤트가 더 나은 옵션입니다).

BTW, TextChanged 이벤트가 Postback을 생성하려면 컨트롤의 자동 프로스트 백을 True로 설정해야합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top