Я пытаюсь создать несколько настраиваемых веб-элементов управления, обертывающих некоторые существующие элементы управления. Один из них, например, обертка для текстового поля (потому что мне нужны дополнительные поведения, такие как соответствующие валидаторы). Проблема в том, что я не уверен, как получить данные этого элемента управления для отправки в обратной передаче.
Очень упрощенный пример:
public class MyTestBox: WebControl
{
protected TB { get; set; }
public Text
{
get { return TB.Text; }
set { TB.Text = value; }
}
protected override void CreateChildControls()
{
TB= new TextBox()
Controls.Add(TB);
}
}
Но если я сейчас протестирую веб-форму с элементом управления:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<bleh:MyTextBox ID="MyTextBox1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Submit" />
Затем после ввода текста в текстовые поля и отправки текст в TextBox1 становится доступным в Page_Load, а MyTextBox1.Text остается пустым. Что мне нужно изменить, чтобы его содержимое было доступно при отправке постбека?
Изменить:
Сейчас я подумал о том, чтобы просто проверить форму запроса при инициализации элемента управления:
protected override void OnInit(EventArgs e)
{
TB.ID = this.ID + "_TextBox1";
Controls.Add(TB);
if (Page.Request.Form[TB.UniqueID] != null)
{
Text = Page.Request.Form[TB.UniqueID];
}
}
Вроде работает, но кажется хакерским. Это кажется разумным способом?