【问题标题】:how to get the text value of dynamically created textbox如何获取动态创建的文本框的文本值
【发布时间】:2014-02-07 08:12:54
【问题描述】:

我想获取单击按钮时动态创建的文本框的值

我需要这样做,因为我的文本框的值用于从数据库中检索数据

我怎么能做到这一点??

流程是按钮单击-创建文本框-用值填充文本框-按钮单击-获取文本框的文本

这是我制作文本框的代码

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i As Integer = 0 To 4
        textbox = New TextBox With {.ID = "TextBox" & i}
        plchld.Controls.Add(textbox)
    Next
End Sub

我尝试过类似的方法,但代码不起作用

Protected Sub OkButton_Click(sender As Object, e As EventArgs) Handles OkButton.Click
    Dim a(5) As String
    For i As Integer = 0 To 4
        a(i) = CType(plchld.FindControl("Textbox" & i), TextBox).Text
    Next
End Sub

提前感谢您的帮助

编辑答案

我找到了解决这个问题的方法。我使用 request.form 来获取我的文本框的值。

感谢参与的人

问候,

朱利安

【问题讨论】:

  • 是 ASP.Net web app 还是 windows app?

标签: asp.net vb.net textbox


【解决方案1】:

这就是我在我的 asp.net 应用程序中所做的。

创建动态控件

TextBox txtDate = new TextBox();
txtDate.EnableViewState = true;
txtDate.ID = "PreixValue" + 1;
txtDate.Text = "07 Feb 2014"
pnl.controls.add(txtdate); 

从该文本框中检索值

DateTime datefrom = DateTime.Now ;

                for (int cnt = 0; cnt < Request.Form.Count; cnt++)
                {
                    if (Request.Form.AllKeys[cnt].Contains("Prefixvalue"))
                    {
                        int ParamStartPoint = Request.Form.AllKeys[cnt].IndexOf("Prefix") + 4;
                        int ParamNameLength = Request.Form.AllKeys[cnt].Length - ParamStartPoint;

                        string[] ControlName = Request.Form.AllKeys[cnt].Substring(ParamStartPoint, ParamNameLength).Split('$');

                                if (ControlName[0] == "Date From")
                                {

                    datefrom = DateTime.Parse(Request.Form[cnt]); 
                    //datefrom has value now
                                }
    }
}

这就是我在我的网络应用程序中所做的,但可能还有其他方法可以实现这一点。

基本上,当您在网络表单中创建动态控件时,这将通过 Request.Form 获得。

希望对你有所帮助。

【讨论】:

  • 你这样做的方式就是我发现工作的方式..使用 request.form 我可以获得我的文本框的值..我会标记你的答案和我的问题的答案,并感谢接听
【解决方案2】:
Protected Sub OkButton_Click(sender As Object, e As EventArgs) Handles OkButton.Click
Dim a(5) As String
For i As Integer = 0 To 4
  Dim anotherObj As TextBox = Me.Controls.Item("Textbox" & i)  
  a(i) =anotherObj.Text
Next 

【讨论】:

    【解决方案3】:

    问题在于动态控件在回发时会丢失,因此当处理 OkButton 单击事件时,您的 plchld 控件内没有任何内容。如果要检索文本框中的文本,则必须在回发时重新创建具有相同 ID 的控件。

    使用您的代码,您只需在回发时确定是否创建了文本框,如果是,则重新创建它们。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Determine if the text boxes were created and if so, recreate them.
        If CBool(ViewState("TextBoxesCreated")) Then
            CreateTextBoxes()
        End If
    End Sub
    
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        CreateTextBoxes()
        ViewState("TextBoxesCreated") = True
    End Sub
    
    Private Sub CreateTextBoxes()
        For i As Integer = 0 To 4
            plchld.Controls.Add(New TextBox With {.ID = "TextBox" & i})
        Next
    End Sub
    
    Protected Sub OkButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles OkButton.Click
        Dim a(4) As String
        For i As Integer = 0 To 4
            a(i) = CType(plchld.FindControl("Textbox" & i), TextBox).Text
        Next
    End Sub
    

    我不知道您在做什么,但如果您不需要,我建议不要动态创建它们。只需显示或隐藏文本框即可。

    参考:http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2023-04-04
      • 2014-01-21
      相关资源
      最近更新 更多