2012-07-29 4 views
0

aspx 페이지에있는 서버 컨트롤을 만들고 있습니다. 사용자가 메뉴 옵션을 선택하면 html 컨트롤 (선택, 입력 등)이 동적으로 추가됩니다. 사용자 정의 컨트롤을 사용하여이 작업을 수행 할 수 있지만 서버 컨트롤에서이 작업을 수행하는 방법을 잘 모르겠습니다.어떻게 동적 HTML을 서버 컨트롤에 추가 할 수 있습니까?

페이지에 이미 앉아 있어도 동적 HTML을 컨트롤에 추가 할 수있는 방법을 알려주는 사람이 있습니까?

답변

2

서버 컨트롤의 출력으로 여러 컨트롤을 추가 할 계획이므로 CompositeControl에서 상속하는 것을 고려해야합니다.이 컨트롤은 여러 가지 구성 컨트롤과 함께 작동하도록 설계되어 상태 및 상태 유지와 같은 일반적인 작업을 수행하는 데 필요한 코드를 최소화합니다. 구성 제어 이벤트 처리

자식 컨트롤을 추가하려면 CreateChildControls을 재정의해야합니다. CreateChildControls 당신은 당신이 일반적으로 어떤에 적용하는 것과 동일한 규칙을 적용하는 데 필요한 ASP.Net page life-cycle

동안 여러 번 호출하기 때문에 당신이 자식 컨트롤이 생성 된 경우 지정 this.ChildControlsCreated = true;를 사용한다이 방법의 끝에서이 필요하다 나는이 그냥 서버 컨트롤과 마찬가지로 상속 추측하고있어

[DefaultProperty("UserText")] 
[ToolboxData(@"<{0}:UserPassword runat=server UserText="""" PasswordText="""" />")] 
public class UserPassword : CompositeControl 
{ 
    public event EventHandler Submitted = delegate { }; 

    [Bindable(true)] 
    [Category("Appearance")] 
    [Description("User text")] 
    [DefaultValue("")] 
    [Localizable(true)] 
    public string UserText 
    { 
     get 
     { 
      var t = this.FindControl("Username") as TextBox; 
      return t.Text; 
     } 
     set 
     { 
      var t = this.FindControl("Username") as TextBox; 
      t.Text = value; 
     } 
    } 

    [Bindable(true)] 
    [Category("Appearance")] 
    [Description("Password text")] 
    [DefaultValue("")] 
    [Localizable(true)] 
    public string PasswordText 
    { 
     get 
     { 
      var t = this.FindControl("Password") as TextBox; 
      return t.Text; 
     } 
     set 
     { 
      var t = this.FindControl("Password") as TextBox; 
      t.Text = value; 
     } 
    } 

    protected override void CreateChildControls() 
    { 
     var p = new Panel { Width= new Unit(200), BackColor = Color.Silver }; 
     var ul = new Label { Text = "Username: " }; 
     var u = new TextBox { ID = "Username" }; 
     var pal = new Label { Text = "Password: " }; 
     var pa = new TextBox { ID = "Password", TextMode = TextBoxMode.Password }; 
     var l = new Literal { Text = "<br />" }; 
     var b = new Button { Text = "Log in" }; 

     b.Click += (x, y) => this.Submitted(x, y); 

     p.Controls.Add(ul); 
     p.Controls.Add(u); 
     p.Controls.Add(l); 
     p.Controls.Add(pal); 
     p.Controls.Add(pa); 
     p.Controls.Add(l); 
     p.Controls.Add(l); 
     p.Controls.Add(b); 

     this.Controls.Add(p); 
     this.ChildControlsCreated = true; 
    } 
} 
+0

: 서버 컨트롤은, 예를 들어 고유 클라이언트 ID

이 간단한 예입니다있을 것이다 그 자식 컨트롤을 보장하는 INamingContainer 인터페이스를 구현? – Yatrix

+1

예. 이것은 서버 컨트롤입니다. 서버 컨트롤을 만들 때'Control','WebControl','CompositeControl' 또는'TextBox' 나'Button'과 같은 특정 컨트롤을 상속받을 수 있습니다 – Jupaol

관련 문제