c# - 标记中的服务器控件,但没有创建实例

标签 c# asp.net vb.net user-controls

总结

是否可以在不使用 <asp:PlaceHolder> 的情况下拥有一个不在页面加载时创建控件实例的服务器端控件? ?

编辑,尽管示例代码在 C# 中,但我添加了 VB.NET 作为标记,因为我相信这是一个特定于 ASP.NET 的问题,而不仅仅是 C#

详情

在 .aspx 页面中(在 .NET 4.0 下的 ASP.NET web 应用程序中),我想要以下代码...

<%if (m_myVar) {%>
<uc1:MyControl1 runat="server" id="myCtrl1"/>
<%}%>

但我不希望系统创建MyControl1 的实例如果m_myVar == false

显而易见的解决方案是使用 <asp:PlaceHolder>控件,并在代码中创建一个实例...

protected MyControl1 myCtrl1 = null;

if (m_myVar)
{
   myCtrl1 = (MyControl1)Page.LoadControl(@"~/MyControl1.ascx");
   myPlacehHolder.Controls.Add(myCtrl1);
}

我只是想知道是否有内置的方法来执行此操作,以便 <asp:PlaceHolder>方法不是必需的。

最佳答案

我相信你可以做这样的事情(请原谅 VB):

   If m_myVar
       For Each c In Page.Controls
                If TypeOf c Is HtmlForm Then
                    Dim ctrl As New MyControl1
                    c.Controls.Add(ctrl)
                End If
       Next
   End If

关于c# - 标记中的服务器控件,但没有创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23106849/

相关文章:

c# - 组合框 = 文本框 + 列表

c# - 将二进制文件发布到票证 ServiceNow REST API - 删除边界和内容类型

mysql - 将表项列为 VB 的字符串

c# - 使 WPF TextBlock 只增长而不收缩?

c# - 正则表达式匹配 "target string"

asp.net - 解析失败,错误为 : No public constructor is available

ASP.NET 如何使用自定义 JavaScript 中的 __doPostBack 和主页面/内容页面

c# - 如何创建基于属性显示页眉、页脚的自定义中继器?

asp.net - 在 .NET 中检查两个 double 的相等性时出现问题——这个方法有什么问题?

c# - 是否有正则表达式的通用/标准子集?