2009-09-24 4 views
1

HiddenField를 동적으로 추가하려는 WebControl이 있습니다.ASP.Net - 어떻게 다른 WebControl에서 HiddenField를 추가하고 유지 관리합니까?

다음 예제를 시도했습니다 : Click here,하지만 this.Page.Form이 Page Init 이벤트에서 null이라는 사실로 인해 작동하지 않습니다.

나는 다음을 시도했지만, 값이 유지되지 않습니다 :

HiddenField hd_IsDirty = new HiddenField(); 

protected override void OnInit(EventArgs e) 
{ 

    this.Controls.Add(hd_IsDirty); 
    hd_IsDirty.ID = "hd_IsDirty"; 

    base.OnInit(e); 

} 

답변

2

다음 작품 :

때마다 컨트롤을 생성 (나쁜 것 같다!) :

HiddenField hd_IsDirty = new HiddenField(); 

이 페이지에게 컨트롤이 ControlState하는 OnInit 필요로 :

this.Page.RegisterRequiresControlState(this); 

오버라이드 ControlState 메소드 :

protected override object SaveControlState() 
{ 

    object obj = base.SaveControlState(); 

    if (!string.IsNullOrEmpty(hd_IsDirty.Value)) 
    { 
     if (obj != null) 
     { 
      return new Pair(obj, hd_IsDirty.Value); 
     } 
     else 
     { 
      return hd_IsDirty.Value; 
     } 
    } 
    else 
    { 
     return obj; 
    } 
} 

protected override void LoadControlState(object state) 
{ 
    if (state != null) 
    { 
     Pair p = state as Pair; 
     if (p != null) 
     { 
      base.LoadControlState(p.First); 
      hd_IsDirty.Value = (string)p.Second; 
     } 
     else 
     { 
      if (state is string) 
      { 
       hd_IsDirty.Value = (string)state; 
      } 
      else 
      { 
       base.LoadControlState(state); 
      } 
     } 
    } 
} 
0

question에이 answer를 참조하십시오.

대답은 동적으로 컨트롤을 추가하는 방법을 보여줍니다.

+0

컨트롤을 추가하고 aspx 마크 업을 사용하지 않고 잊어 버리는 '마법 같은'방법이 있습니까? ViewState를 켜고 끌 수 있기 때문에 ViewState를 사용하는 아이디어가 마음에 들지 않습니다. – GenericTypeTea

+0

ASP.NET과 달리 Windows와 달리 상태를 유지하지 않습니다. –

+0

알아. 나는 내가 알지 못했던 더 나은 방법이 있기를 바랐다. ViewState처럼 비활성화 할 수 없기 때문에 대답을 사용하겠습니다. – GenericTypeTea

관련 문제