2014-01-02 7 views
1

У меня относительно простая проблема ASP.NET (я думаю), к сожалению, я не могу решить самостоятельно. Я пытаюсь сделать следующее:Не удалось обновить textbox.text

  1. На странице Я загружаю несколько элементов управления (текстовые поля) программно;
  2. После этой загрузки пользователь должен иметь возможность выбрать значение для загрузки в текстовое поле с панели управления, которое добавляется на страницу после нажатия кнопки
  3. После закрытия панели выбранный текст из панель должна быть загружена в текстовое поле

Однако в операциях vb.net, приведенных ниже, при запуске строка «test» никогда не попадает в текстовое поле - всякая помощь в решении этого вопроса будет принята с благодарностью.

Public Class test 
Inherits System.Web.UI.Page 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Controls_Load() 
End Sub 
Public Sub Controls_Load() 
    Dim ttf_tb As New TextBox With {.ID = "ttf_tb"} 
    Master_Panel.Controls.Add(ttf_tb) 
    Dim ttf_button As New Button 
    Master_Panel.Controls.Add(ttf_button) 
    AddHandler ttf_button.Click, AddressOf TTF_BUTTON_CLICK 
End Sub 
Public Sub TTF_BUTTON_CLICK(sender As Object, e As EventArgs) 
    Dim str As String = sender.id 
    Dim panel As New Panel 
    panel.ID = "TTF_Panel" 
    panel.Width = 300 
    panel.Height = 300 
    Master_Panel.Controls.Add(panel) 
    panel.BackColor = Drawing.Color.Black 
    panel.Style.Add(HtmlTextWriterStyle.Position, "absolute") 
    panel.Style.Add(HtmlTextWriterStyle.Left, "200px") 
    panel.Style.Add(HtmlTextWriterStyle.Top, "100px") 
    panel.Style.Add(HtmlTextWriterStyle.ZIndex, "100") 
    Dim CL_Button As New Button 
    CL_Button.ID = "TTF_Close_" & Replace(str, "TTF_Button_", "") 
    panel.Controls.Add(CL_Button) 
    AddHandler CL_Button.Click, AddressOf TTF_Close_Button_Click 
End Sub 
Public Sub TTF_Close_Button_Click(sender As Object, e As EventArgs) 
    Dim ttf_tb As TextBox = Master_Panel.FindControl("ttf_tb") 
    ttf_tb.Text = "Test" 
    Dim panel As Panel = FindControl("TTF_Panel") 
    Master_Panel.Controls.Remove(panel) 
End Sub 
End Class 

ответ

1

Вы должны создать/обновить динамические элементы управления в случае инициализации:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    Controls_Load() 
End Sub 

Это позволит вам сохранить свои состояния в постбэков.

Дополнительную информацию об этой теме см. В статье MSDN по адресу the ASP.NET Page Life Cycle.

2

Мне кажется, вам нужно заново создать элементы управления в методе Page_Init. Прошло некоторое время с тех пор, как я сделал веб-формы, но я думаю, что это что-то вроде:

Когда пользователь нажимает кнопку, возвращается сообщение назад. Это воссоздает новый экземпляр вашего класса, создает элементы управления на странице, назначает любые значения форм, а затем вызывает ваше событие Page_Load.

Проблема в том, что вы слишком поздно создаете элементы управления, поэтому значения форм никогда не назначаются правильно.

Смежные вопросы