2013-01-23 4 views
0

나는 복합 웹 서버 컨트롤을 가지고 있는데, 현재는 어떤 액션도 수행하지 않습니다. 내 목표는 그 안에 체크 박스로 시작하는 자식 컨트롤을 배치하는 것입니다. 등록 및 페이지에 배치복합 서버 컨트롤에 자식을 추가하면 뷰 상태가 확대되는 이유는 무엇입니까?

[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에 대한 호출을 사용합니다.

왜보기 상태가 커지는지 설명 할 수 있습니까? 미리 감사드립니다.

답변

0

viewstate가 채워지는 이유는 체크 박스를 포함하여 데이터 컨트롤의 대부분에 의해 IPostBackDataHandler 인터페이스를 구현하고 있기 때문입니다. 인터페이스의 메서드 LoadPostData는 LoadViewState 이벤트 후 자동으로 호출되고 viewstate는 게시 된 데이터에서 채워집니다. Here에 대한 멋진 기사입니다.

0

컨트롤의 확인란에 대해 viewstate를 사용하지 않도록 설정해 보았습니까? 당신이 달리 지정하지 않는 한 viewstate가이 컨트롤을 설명해야한다고 preusme? 라이프 사이클 내에서이 컨트롤을 쉽게 사용하려면 viewstate를 활성화 된 상태로 유지해야합니다.

+0

전체 컨트롤을 비활성화하는 것뿐만 아니라 확인란의보기 상태를 사용하지 않으면 결과가 없습니다. 뷰 상태는 동일한 "긴"크기로 유지됩니다. 당신은 "viewstate는이 통제를 설명해야한다"고 말했다. 예, 컨트롤의 상태를 저장해야합니다 (및 확인란) 상태의 경우에만 컨트롤의 변경 사항을 볼 때 상태 추적을 설정합니다. 자식 요소 dirties를 추가하는 동작이 상태를 정확하게 보는 것처럼 보입니다. – Eadel