Я пытаюсь создать несколько пользовательских веб-элементов управления, обертывающих некоторые существующие элементы управления.Например, одна из них - это обтекание для текстового поля (потому что мне нужны дополнительные поведения, такие как соответствующие валидаторы).Проблема в том, что я не уверен, как получить данные этого элемента управления для отправки в обратной передаче.
Очень упрощенный пример:
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);
}
}
Но если я сейчас протестируюwebform с элементом управления:
<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];
}
}
Кажется, что работает, но чувствует себя немного хакером.Это похоже на разумный способ?