【问题标题】:Failure to update textbox.text无法更新 textbox.text
【发布时间】:2014-01-02 20:00:15
【问题描述】:

我有一个相对简单的 ASP.NET 问题(我应该认为),很遗憾我无法自己解决。我正在尝试做的是以下内容:

  1. 在一个页面上,我以编程方式加载了许多控件(文本框);
  2. 在此加载之后,用户应该能够从单击按钮后添加到页面的面板控件中选择要加载到文本框中的值
  3. 关闭面板后,应将面板中选定的文本加载到文本框中

但是,在下面的 vb.net 语句中,当运行“测试”字符串时,它永远不会进入文本框 - 任何解决此问题的帮助将不胜感激。

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

【问题讨论】:

    标签: asp.net vb.net postback


    【解决方案1】:

    我认为您需要在 Page_Init 方法中重新创建控件。自从我完成网络表单以来已经有一段时间了,但我认为它类似于:

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

    问题是您创建控件的时间太晚了,因此表单值永远不会正确分配。

    【讨论】:

      【解决方案2】:

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

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

      这应该允许您跨 PostBacks 维护它们的状态。

      有关此主题的详细信息,请参阅 the ASP.NET Page Life Cycle 上的 MSDN 文章。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-21
        • 1970-01-01
        • 2010-11-10
        • 2014-08-28
        相关资源
        最近更新 更多