2011-05-13 40 views
0
public class TextBoxDerived : System.Web.UI.WebControls.TextBox 
{ 
protected override void OnLoad(EventArgs e) 
{ 
    this.Controls.Add(new LiteralControl("Hello")); 
} 
} 

上面的代碼似乎沒有做任何事情?將控件添加到文本框(c#/ .net)

我希望像

Hello 
<input type"textbox" /> 

在HTML渲染。

+0

在我看來,你對這個方向是錯誤的。還有其他方法可以實現這一點。你爲什麼選擇這種方法? – anothershrubery 2011-05-13 09:40:32

回答

1

A TextBox不是CompositeControl,所以它的孩子不會自動呈現。

例如,您可以做的是覆蓋Render方法並預先手動呈現控件。

如果你想,因爲我認爲,提供一個文本框,標籤,而不是一些文字內容,也許使用HtmlGenericControlspandiv標籤會更適合,以自動呈現逃脫文本。

protected override void Render(HtmlTextWriter writer) 
{ 
    var label = new HtmlGenericControl("span"); 
    label.InnerText = "Hello"; 
    label.RenderControl(writer); 

    base.Render(writer); 
} 
+0

謝謝,這是我想出的解決方案。 如果我創建了system.web.ui.webcontrols.webcontrol()(該文本框派生自)的新實例,則會添加所有子控件。你能解釋一下嗎? – maxp 2011-05-13 09:49:02

+0

@maxp其實,我想我誤解了CompositeControl的要求 - 默認情況下'WebControl'也呈現其子控件。我看了一下Reflector中的'TextBox Render()'方法,發現它實際上並沒有調用'base.Render()'(它將呈現子控件),而是手動呈現開始標記,文本和結束標籤。 – SirViver 2011-05-13 09:56:15

+1

爲了澄清,我應該補充一點,即使有「子」控件也無法解決您的問題,因爲子控件將作爲TextBoxes的標記中的子節點進行呈現,無論如何這都是非法的。 – SirViver 2011-05-13 10:05:02