Asp.net 无法更新textbox.text

Asp.net 无法更新textbox.text,asp.net,vb.net,postback,Asp.net,Vb.net,Postback,我有一个相对简单的ASP.NET问题(我应该认为),遗憾的是我自己无法解决。我想做的是: 在一个页面上,我以编程方式加载许多控件(文本框) 在此加载之后,用户应该能够从单击按钮后添加到页面的面板控件中选择要加载到文本框中的值 关闭面板后,应从面板中选择的文本应加载到文本框中 然而,在下面的vb.net语句中,当运行“test”字符串时,它永远不会进入文本框-如果您能帮助解决这个问题,我们将不胜感激 Public Class test Inherits System.Web.UI.Page Pro

我有一个相对简单的ASP.NET问题(我应该认为),遗憾的是我自己无法解决。我想做的是:

  • 在一个页面上,我以编程方式加载许多控件(文本框)
  • 在此加载之后,用户应该能够从单击按钮后添加到页面的面板控件中选择要加载到文本框中的值
  • 关闭面板后,应从面板中选择的文本应加载到文本框中
  • 然而,在下面的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
    

    您应该在Init事件中创建/重新创建动态控件:

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Controls_Load()
    End Sub
    
    这应该允许您在回发中维护它们的状态


    有关此主题的更多信息,请参阅上的MSDN文章。

    我认为您需要在Page_Init方法中重新创建控件。我已经有一段时间没有做过web表单了,但我认为它类似于:

    当用户单击按钮时,将触发回发。这将重新创建类的新实例,在页面上创建控件,分配任何表单值,然后调用页面加载事件

    问题是您创建控件太晚了,因此表单值从未正确分配