воссоздать текстовое поле управления сервером asp.net

Я пытаюсь воссоздать элемент управления 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);
        }
    }

person Omu    schedule 08.08.2011    source источник
comment
Убедились ли вы, что элемент управления добавлен достаточно рано (т. е. в Page_Init) в пакет состояний?   -  person Olaf    schedule 08.08.2011
comment
@Olaf это добавлено в разметку   -  person Omu    schedule 08.08.2011
comment
Разве это не вариант наследования от TextBox вместо WebControl (и переопределения Text)? Это не прямой ответ на ваш вопрос, но может решить основную проблему.   -  person Olaf    schedule 08.08.2011
comment
Алекс прав: если вы не наследуете от TextBox (который делает это автоматически), вам нужно вручную прочитать опубликованное значение из Request.Form[this.ClientID], например, при получении текста. Я пробовал, работает.   -  person Olaf    schedule 08.08.2011


Ответы (1)


У вашего ввода нет имени... Без имени его значение никогда не будет отправлено обратно!

person Alex    schedule 08.08.2011
comment
действительно, но видимо этого недостаточно - person Omu; 08.08.2011
comment
И вы должны проверить Request[this.Name], чтобы обновить свой текст, иначе он всегда будет пустым! - person Alex; 08.08.2011
comment
реализация IPostBackDataHandler также помогает - person Omu; 08.08.2011