如何获取动态创建的文本框的文本值

时间:2014-02-07 08:12:55

标签: asp.net vb.net textbox

我希望获得单击按钮时动态创建的文本框的值

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

我怎么能实现这个呢?

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

这是我制作文本框的代码

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来获取文本框的值。

感谢参与的任何人

此致

儒略

3 个答案:

答案 0 :(得分:3)

这就是我在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
                                }
    }
}

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

基本上当您在webform中创建动态控件时,这将通过Request.Form。

提供

希望这会对你有所帮助。

答案 1 :(得分:0)

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 

答案 2 :(得分:0)

问题是动态控件在回发时会丢失,所以当处理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