重新创建textbox asp.net服务器控件
我正在尝试重新创建TextBox控件, 问题是,回发后,文本框中的值返回到初始状态 有人知道如何让它在回发后保持价值吗重新创建textbox asp.net服务器控件,asp.net,asp.net-controls,Asp.net,Asp.net Controls,我正在尝试重新创建TextBox控件, 问题是,回发后,文本框中的值返回到初始状态 有人知道如何让它在回发后保持价值吗 [DefaultProperty("Text")] [ToolboxData("<{0}:MyTextBox runat=server></{0}:MyTextBox>")] public class MyTextBox : WebControl { [Bindable(true)] [D
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyTextBox runat=server></{0}:MyTextBox>")]
public class MyTextBox : WebControl
{
[Bindable(true)]
[DefaultValue("")]
public string Text
{
get
{
return (String)ViewState["Text"] ?? string.Empty;
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
var a = string.Format(@"<input type='text' id='{0}' name='{0}' value='{1}' />", ID, Text);
output.Write(a);
}
protected override void Render(HtmlTextWriter writer)
{
RenderContents(writer);
}
}
[DefaultProperty(“文本”)]
[ToolboxData(“”)
公共类MyTextBox:WebControl
{
[可装订(真实)]
[默认值(“”)
公共字符串文本
{
得到
{
返回(字符串)视图状态[“文本”]??字符串。空;
}
设置
{
ViewState[“文本”]=值;
}
}
受保护的覆盖无效渲染内容(HtmlTextWriter输出)
{
var a=string.Format(@“”,ID,Text);
输出。写入(a);
}
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
渲染内容(作者);
}
}
您的输入没有名称。。。如果没有名字,他的价值永远不会被回复 您的输入没有名称。。。如果没有名字,他的价值永远不会被回复 确实如此,但显然这还不够,您应该检查请求[this.Name]来更新您的文本,否则它将始终为空!实现IPostBackDataHandler也有帮助,但显然这还不够,您应该检查Request[this.Name]以更新文本,否则它将始终为空!实现IPostBackDataHandler还可以帮助您确保控件足够早地添加到状态包中(即在Page_Init中)?@Olaf它添加到标记中。它不是从TextBox继承而不是WebControl(并覆盖文本)的选项吗?这不是对你问题的直接回答,但可能解决了根本问题。Alex是对的:如果你没有继承TextBox(它会自动执行),你必须手动读取Request.Form[this.ClientID]中的发布值,例如在“获取”文本时。我已经尝试过了,它可以工作。您是否确保控件足够早地添加到状态包中(即在Page_Init中)?@Olaf它添加到标记中。它不是从文本框继承而不是WebControl(和覆盖文本)的选项吗?这不是对你问题的直接回答,但可能解决了根本问题。Alex是对的:如果你没有继承TextBox(它会自动执行),你必须手动读取Request.Form[this.ClientID]中的发布值,例如在“获取”文本时。我试过了,效果不错。