我希望获得单击按钮时动态创建的文本框的值
我需要这样做,因为我的文本框的值用于从数据库中检索数据
我怎么能实现这个呢?
流程是按钮单击 - 创建文本框 - 填充带有值的文本框 - 按钮单击 - 获取文本框文本
这是我制作文本框的代码
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来获取文本框的值。
感谢参与的任何人
此致
儒略
答案 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