【问题标题】:Dynamic creation of ASP.NET Form ElementsASP.NET 表单元素的动态创建
【发布时间】:2010-12-18 19:37:42
【问题描述】:

我正在尝试构建一个在使用时自行生成的表单。我创建了一个非常简单的示例,与我在下面尝试做的事情松散相关,但这说明了问题。

用户在文本框中键入一个单词,单击按钮,一个新的文本框将加载到面板中,其中包含用户输入的原始文本框中的值。然后,用户应该能够键入其他/相同的内容,并通过单击按钮在其中创建另一个文本框,基本上允许 0,1,..,n 文本框出现在表单上的“txtFeeder”文本框上方。

问题是每次单击按钮时,它都不会添加新控件,它似乎只是用新的(增量)ID 更新已经创建的控件。我不确定我是否做错了什么,或者我想做的事情无法完成(我很难相信)?

这是 .aspx...

<form id="frmMain" runat="server">
    <asp:Panel ID="pnlAdded" runat="server"></asp:Panel>
    <asp:TextBox ID="txtFeeder" runat="server"></asp:TextBox>
    <asp:Button ID="btnFeedPanel" runat="server" Text="Button" />
</form>

...这里是 .aspx.vb...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        ViewState.Add("elementCount", 0)
    End If
End Sub
Protected Sub btnFeedPanel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFeedPanel.Click
    ViewState("elementCount") += 1
    Dim txtNew = New TextBox
    txtNew.ID = "txtElement" & ViewState("elementCount")
    txtNew.Text = txtFeeder.Text
    pnlAdded.Controls.Add(txtNew)
    txtNew = Nothing
End Sub

谢谢

【问题讨论】:

    标签: asp.net vb.net web-applications dynamic webforms


    【解决方案1】:

    在 PostBack 上,您需要从 ViewState 显式重新生成按钮(检查您在视图状态中添加的计数器并重新生成添加的按钮) - 否则它们将消失(并且只有原始的会出现,就像您一样)重新体验)。

    看看this question,这家伙正在尝试实现与您正在寻找的非常相似的 smt(维护一堆动态按钮并在回发时重新生成它们)。

    【讨论】:

    • 谢谢 - 这个链接也很有帮助。
    【解决方案2】:

    动态添加到页面的控件不会在表单发布之间自动保留。控件本身不会保留在页面的视图状态中。我认为您需要在每次回发时重建所有先前添加的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2021-09-25
      • 2011-01-25
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多