【问题标题】:How to load multiple user controls in ASP.net page from a single .ascx file如何从单个 .ascx 文件加载 ASP.net 页面中的多个用户控件
【发布时间】:2012-11-11 14:22:39
【问题描述】:

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

这是我的 .ascx 文件:

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

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

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

<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”没有定义!

我该怎么办?

【问题讨论】:

  • 你知道视图状态是打开还是关闭?
  • 我使用 ViewState 编辑了帖子,感谢您的回答。

标签: asp.net vb.net dynamic controls


【解决方案1】:

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

【讨论】:

  • 你知道我要找的样本吗?
  • 谢谢,我尝试序列化控件,但我有一个问题:我可以在“OnClickButton”事件中创建一个 CHelloWorld 实例吗?不行,CHelloWorld没有定义……
【解决方案2】:

我很高兴 ViewState 为您工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2010-11-20
    • 2013-09-08
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多