繁体   English   中英

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

[英]how to get the text value of dynamically created 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来获取文本框的值。

感谢参加的任何人

问候,

朱利安

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

这是我在Web应用程序中所做的事情,但是可能还有其他方法可以实现此目的。

基本上,当您在Webform中创建动态控件时,可以通过Request.Form使用。

希望对您有帮助。

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 

问题是动态控件在回发时丢失,因此,在处理OkButton click事件时, 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM