나는 복합 웹 서버 컨트롤을 가지고 있는데, 현재는 어떤 액션도 수행하지 않습니다. 내 목표는 그 안에 체크 박스로 시작하는 자식 컨트롤을 배치하는 것입니다. 등록 및 페이지에 배치복합 서버 컨트롤에 자식을 추가하면 뷰 상태가 확대되는 이유는 무엇입니까?
[DefaultProperty("Text")]
[ToolboxData("<{0}:SubmitImageControl runat=\"server\"></{0}:SubmitImageControl>")]
public class SubmitImageControl : CompositeControl
{
private CheckBox _checkBox;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
protected override void CreateChildControls()
{
_checkBox = new CheckBox();
Controls.Add(_checkBox);
base.CreateChildControls();
}
protected override void RenderContents(HtmlTextWriter output)
{
_checkBox.RenderControl(output);
}
}
:
<%@ Register TagPrefix="uc" Namespace="PostBackHandlerApp.Controls" Assembly="PostBackHandlerApp" %>
<uc:SubmitImageControl runat="server" />
확인란이 페이지에 표시하고 우리가보기 상태를 볼 때까지 모든 것이 잘 보인다 나는 다음과 같은 방법으로 작업을 수행하려고합니다. 우리는 단순히 코드 Controls.Add에 (_checkBox)을 제거하면 그 값은, 다음
/wEPDwULLTExMTg2MzM0NjJkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBR1jdGwwMCRNYWluQ29udGVudCRjdGwwMCRjdGwwMD+PWeqrbtVyQSNMxvfjcmJkKAwpIuEPWJd+m5W6eJtQ
이다;는 뷰 상태의 크기는 크게 감소 :
/wEPDwULLTExMTg2MzM0NjJkZLrri0oSGPS9ZiOTsRtSageoskXzCME4KCdRZxOiJyR9
내가 아이 초기화 코드 (내가 아는 한, 뷰 상태 추적이 여전히 비활성화) 내 제어하는 OnInit 방법, 결과의 숙박에 추가를 이동하는 경우 똑같다. 또한, this MSDN 문서 만을 CreateChildControls 메서드에서 초기화를 수행 할 것을 권장합니다
당신은 자식을 CreateChildControls 방법에서 제어하지하는 OnInit 또는 다른 라이프 사이클 단계를 작성해야합니다. 서버 컨트롤 아키텍처는 데이터 바인딩 중 (해당되는 경우)과 같이 Controls 컬렉션이 필요할 때마다 CreateChildControls에 대한 호출을 사용합니다.
왜보기 상태가 커지는지 설명 할 수 있습니까? 미리 감사드립니다.
전체 컨트롤을 비활성화하는 것뿐만 아니라 확인란의보기 상태를 사용하지 않으면 결과가 없습니다. 뷰 상태는 동일한 "긴"크기로 유지됩니다. 당신은 "viewstate는이 통제를 설명해야한다"고 말했다. 예, 컨트롤의 상태를 저장해야합니다 (및 확인란) 상태의 경우에만 컨트롤의 변경 사항을 볼 때 상태 추적을 설정합니다. 자식 요소 dirties를 추가하는 동작이 상태를 정확하게 보는 것처럼 보입니다. – Eadel