【发布时间】:2011-02-28 09:17:10
【问题描述】:
我正在尝试创建一些包含一些现有控件的自定义 Web 控件。例如,其中一个是文本框的包装(因为我需要额外的行为,例如相应的验证器)。问题是,我不确定如何让该控件的数据在回发中发送。
一个非常简单的例子:
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];
}
}
它似乎工作正常,但感觉有点 hacky。这看起来是一种合理的方式吗?
【问题讨论】:
-
是继承自 System.Web.UI.Textbox 的选项吗?如果是这样,您不会关心 Text 属性,您将专注于要添加的任何功能。
-
在这种情况下这是一个选项,我可能会这样做。另一方面,还有一些更复杂的控件也有类似的问题,问题更大,坚持我在编辑中添加的方式可能会更好。
标签: asp.net web-controls