2012-07-29 76 views
0

我正在創建一個服務器控件,它將位於aspx頁面中。當用戶選擇菜單選項時,html控件(選擇,輸入等)將被動態添加。我可以使用用戶控件來完成,但我不確定如何在服務器控件中進行操作。如何將動態HTML添加到服務器控件?

任何人都可以告訴我如何添加動態HTML到控件中後,它已經坐在一個頁面?

回答

2

由於您計劃添加多個控件作爲服務器控件的輸出,因此您應該考慮從CompositeControl繼承,該控件旨在與幾個組成控件一起使用,最小化執行常見操作所需的代碼,如保持狀態和處理成分控制事件

您需要覆蓋CreateChildControls以添加子控件。在這種方法中,你應該使用this.ChildControlsCreated = true;指定是否創建子控件的結束,這是必要的,因爲CreateChildControls是在ASP.Net page life-cycle

您需要申請,您通常適用於任何相同的規則調用多次服務器控件,例如實現INamingContainer接口,以確保子控件都會有一個唯一的客戶端ID

這是一個簡單的例子:

[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

我猜這是遺傳的,就像一個服務器控件? – Yatrix 2012-07-29 20:35:18

+1

是的。這是一個服務器控件。在創建服務器控件時,您可以繼承Control,WebControl,CompositeControl或任何特定的控件,例如TextBox或Button。 – Jupaol 2012-07-29 21:51:12

相關問題