2014-10-17 66 views
0

我创建了一个由按钮事件动态触发的按钮(不是来自Page_Load),但添加的控件已自动删除。动态添加的控件总是被删除/删除

Protected Sub btnDate_Click(s As Object, e As EventArgs) 
    Label1.Text = CType(s,Button).Text & " has been clicked." 
End Sub 

Protected Sub btnDiagDateOK_Click(s As Object, e As EventArgs) Handles btnDiagDateOK.Click 

    Dim b As New Button 
    Dim dates() As String = TextBox1.Text.Split("|") ' Ex: 10OCT2014|11OCT2014|12OCT2014 

    For Each s As String in dates 
     b = New Button 
     b.Text = s 
     AddHandler b.Click, AddressOf btnDate_Click 

     Panel1.Controls.Add(b) 
    Next 

End Sub 

的问题是每次点击不同的按钮(或创建的按钮)时,所有内部Panel1的控件被除去。

有没有一种方法,我创建的控件不会被删除,而不使用用户定义的JavaScript?

+1

您需要在每次回发时重新创建控件,并且每次都必须具有完全相同的ID。在回发上创建控件时,最好在OnLoad事件之前存在新控件,以便它们能够及时正确创建以接收回发事件。否则回发发生,并且它们不存在及时接收任何数据。 – 2014-10-17 03:47:49

回答

2

这与“用户定义的javascript”无关。

每次页面在服务器上实例化时,都会根据页面的aspx文件中的标记创建页面控件。除非页面方法之一存在代码,否则页面不会了解/记住其先前轮回中动态创建的附加控件。您必须保存关于这些控件的信息(例如,在页面的ViewState中),并最迟在Page_Load中再次创建它们。

+0

它与Session类似,但它有点复杂,因为我将动态使用它。对象仍然保留,但我有另一个事件,将改变对象的属性,通过点击自己触发。从来没有想过ViewState会是一个很好的帮助:) – pvzkch 2014-10-17 06:10:35