【发布时间】:2011-08-08 17:08:58
【问题描述】:
我正在尝试重新创建 TextBox 控件, 问题是回发后文本框中的值返回到它的初始状态。
有人知道如何让它在回发后保持价值吗?
[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);
}
}
【问题讨论】:
-
您是否确保足够早地(即在 Page_Init 中)将控件添加到状态包中?
-
@Olaf 它已添加到标记中
-
从 TextBox 继承而不是 WebControl (并覆盖 Text)不是一个选项吗?这不是您问题的直接答案,但可能会解决根本问题。
-
Alex 是对的:如果您不从 TextBox 继承(它会自动执行此操作),则必须手动从 Request.Form[this.ClientID] 读取发布的值,例如在“获取”时文本。我试过了,它有效。