以编程方式嵌套ASP.NET用户控件
我有一个用户控件,它以编程方式多次包含第二个用户控件,但最终的结果是根本不会为这些控件生成HTML Default.aspx以编程方式嵌套ASP.NET用户控件,asp.net,vb.net,Asp.net,Vb.net,我有一个用户控件,它以编程方式多次包含第二个用户控件,但最终的结果是根本不会为这些控件生成HTML Default.aspx <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="TestApplication._Default" %> <%@ Register TagName="Ten" TagPrefix="me" Src="~/Ten.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="TestApplication._Default" %>
<%@ Register TagName="Ten" TagPrefix="me" Src="~/Ten.ascx" %>
<html>
<head runat="server"></head>
<body>
<form id="form1" runat="server">
<me:Ten ID="thisTen" runat="server" />
</form>
</body>
</html>
1.ascx
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="One.ascx.vb" Inherits="TestApplication.One" %>
<asp:Button ID="OneButton" Text="Press ME!" runat="server" />
编辑2:
Dim o As One = Me.LoadControl("~/One.ascx")
o._number = I.ToString
List.Controls.Add(o)
我不会在OnInit事件中执行此操作,但这可能与您的问题有关,也可能与您的问题无关。相反,我将在OnLoad事件中加载控件 但是,使用
new
关键字通常不是加载用户控件的方式。对不起,我只懂C#,不知道确切的翻译:
在C#中:
这在VB.NET中看起来正确吗
Dim one As One = Me.LoadControl("~/Controls/One.ascx")
加载控件后,您可能必须删除构造函数并设置属性。我不会在OnInit事件中执行此操作,但这可能与您的问题有关,也可能与您的问题无关。相反,我将在OnLoad事件中加载控件 但是,使用
new
关键字通常不是加载用户控件的方式。对不起,我只懂C#,不知道确切的翻译:
在C#中:
这在VB.NET中看起来正确吗
Dim one As One = Me.LoadControl("~/Controls/One.ascx")
加载控件后,您可能需要删除构造函数并设置属性。是的,除了构造函数有一个参数外,这可以工作。这会导致HttpCompileException。我可以通过在数组中传递参数来克服这个问题。但是这并不能解决问题,因为仍然没有生成html。请注意,如果要处理在子控件中从父控件生成的事件,必须使用Page_Init事件来创建它们。否则页面加载事件将正常工作。是的,这将正常工作,除非构造函数有参数。这会导致HttpCompileException。我可以通过在数组中传递参数来克服这个问题。但是这并不能解决问题,因为仍然没有生成html。请注意,如果要处理在子控件中从父控件生成的事件,必须使用Page_Init事件来创建它们。否则页面加载事件将正常工作。
Dim p() As String = {I.ToString}
Dim o As One = Me.LoadControl(New One("").GetType, p)
List.Controls.Add(o)
Dim o As One = Me.LoadControl("~/One.ascx")
o._number = I.ToString
List.Controls.Add(o)
One one = (One)this.LoadControl("~/Controls/One.ascx");
Dim one As One = Me.LoadControl("~/Controls/One.ascx")