【问题标题】:recreate the textbox asp.net server control重新创建文本框 asp.net 服务器控件
【发布时间】: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] 读取发布的值,例如在“获取”时文本。我试过了,它有效。

标签: asp.net asp.net-controls


【解决方案1】:

您的输入没有名称...没有名称,他的值永远不会回传!

【讨论】:

  • 确实如此,但显然这还不够
  • 你应该检查 Request[this.Name] 来更新你的文本,否则它总是空的!
  • 实现 IPostBackDataHandler 也有帮助
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多