如何简单地动态创建控件并检索它们的值

时间:2012-08-20 14:13:33

标签: asp.net vb.net

  • 我有一个带有选项“1”,“2”和“3”的下拉列表。
  • 用户选择一个选项并按下按钮。
  • 根据他们选择的号码,将动态创建1,2或3个文本框,其中包含ID textBox_1,textBox_2,textBox_3(例如)。
  • 然后,用户将输入每个文本框并按下另一个按钮,这些文本框的值将被验证并保存。

有人可以提供有关如何执行此操作(看似非常简单)任务的代码吗?我已经在我的实际项目中提出了两个冗长的问题,这些问题似乎被误解了,或者我得到了错误的结论(包括在Page_Load / Page_Init上使用中继器等创建文本框)。

这需要动态完成,因为在我的项目中有很多控件,这个数字可能会有所不同。到目前为止,如果需要,我可以发布我的代码,但在其他问题中,这似乎让事情变得混乱。

2 个答案:

答案 0 :(得分:1)

代码用于创建动态文本框:

Protected Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    If ((Not (ddl.SelectedValue) Is Nothing)  _
                AndAlso (Integer.Parse(ViewState("count").ToString) <> 0)) Then
        Dim i As Integer = 1
        Do While (i <= Integer.Parse(ddl.SelectedValue))
            Dim t As TextBox = New TextBox
            t.ID = ("TextBox_" + i)
            form1.Controls.Add(t)
            i = (i + 1)
        Loop
    ElseIf ((Not (ddl.SelectedValue) Is Nothing)  _
                AndAlso (Integer.Parse(ViewState("count").ToString) > 0)) Then
        Dim id As Integer = Integer.Parse(ViewState("count").ToString)
        Dim i As Integer = 1
        Do While (i <= Integer.Parse(ddl.SelectedValue))
            Dim t As TextBox = New TextBox
            t.ID = ("TextBox_" + id)
            form1.Controls.Add(t)
            id = (id + 1)
            i = (i + 1)
        Loop
    End If
End Sub

并在页面加载中添加此

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

如果不是IsPostBack那么 ViewState(“count”)= 0 万一 结束子

要验证数据,请在页面中添加一个按钮控件(我将尽快添加代码)

答案 1 :(得分:1)

一个问题:如果控件已经创建,如果可以创建超过下拉列表中的可用数字(f.e.3 +3),该怎么办?

假设您允许创建的控件数量超过控件数量,则需要

  • 处理按钮的Click事件
  • 将这些控件添加到页面上的占位符或面板(容器控件)中,并根据其编号(f.e。textBox_4
  • 使用正确的ID
  • 将控件总数存储在ViewStateSession变量
  • 使用与以前相同的ID在Page_InitPage_Load(最晚)重新创建这些控件

然后你确保加载ViewState并触发事件。

这是代码,它展示了我的意思:

load dynamic control from a dropdownlist event handler, how to preserve the control after button event