ASP.NET WebControl & Page- 컨트롤 추가 (텍스트 상자와 같은) 동적으로
-
06-07-2019 - |
문제
텍스트 상자를 사용하여 사용자 정의 서버 컨트롤 (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를 처리해야합니다.