0

我尝试使用带有 .ascx 文件的自定义控件在单击按钮事件时在 ASP 页面中加载多个控件。

这是我的 .ascx 文件:

<%@ Control Language="VB" ClassName="CHelloWorld" %>
<script runat="server">
</script>

<asp:Panel ID="panel" runat="server">
    hello world!
</asp:Panel>

现在我创建一个带有按钮的 .aspx 文件,以及一个面板,每次使用 click on button 时我都会在其中添加控件:

<asp:Panel runat="server" id="panelcontrols">
</asp:Panel>
<asp:Button id="myButton" OnClick="OnClickButton" Text="Add" />

这是我的带有点击事件的 .vb 文件:

Sub OnClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myControl As Control
    myControl  = LoadControl("myfile.ascx")
    panelcontrols.Controls.Add(myControl  )
End Sub

有了这个实现,当我第一次点击时:我看到“Hello World!” 在我的页面中,但是当我第二次,第三次点击时,......没有发生任何变化!

是因为我只能从 .ascx 加载一个控件吗?

如何从单个 .ascx 文件创建多个控件?

谢谢。

[编辑]

好的,我现在使用 WiewState 来记住已经创建的控件。谢谢。

但我有一个问题:

我的 .aspx 文件使用 .vb 文件中的代码(我在其中定义了 OnClickButton),并在 @Page 指令中使用此行:Src="[path]/myscript.vb

但是在这个 .vb 文件中我不知道如何使用 CHelloWorld 控件类型来修改控件属性。

如果我使用此代码它不起作用:

Sub OnClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myControl As CHelloWorld
    myControl  = LoadControl("myfile.ascx")
    panelcontrols.Controls.Add(myControl  )
End Sub

它没有说“CHelloWorld”没有定义!

我能怎么做 ?

4

2 回答 2

1

不,这是因为您正在动态添加控件。在每个页面加载时,添加的控件都将丢失,因此您需要每次都添加它(因此有一种“记住”您在回发之间添加的内容的方法)

于 2012-11-23T08:33:19.580 回答
0

我很高兴 ViewState 为您工作。

关于下一个问题,你有正确的命名空间吗?(这可能值得在一个单独的问题中提出)

于 2012-11-25T04:00:28.730 回答