以编程方式加载在 web.config 中注册的代码隐藏中的用户控件
本文关键字:注册 代码 隐藏 控件 用户 config 方式 编程 加载 web | 更新日期: 2023-09-27 18:30:16
加载在 web.config 文件中注册的用户控件,而不是在 aspx 文件中注册的用户控件?
这是我会做什么的一个例子。在我的aspx中:
索引.aspx
<%@ Register TagPrefix="module" TagName="ModExample" Src="~/controls/example.ascx" %>
索引.cs
protected void Page_Load(object sender, EventArgs e)
{
controls_example exmp = LoadContent("controls/example.ascx") as controls_example;
myContentPanel.Controls.Add(exmp);
}
我必须在页面中注册我的用户控件,否则 ASP 将不知道"controls_example"是什么。但是,我知道您可以将 web.config 更改为如下所示:
<configuration>
<system.web>
<pages>
<controls>
<add tagPrefix="module" tagName="ModExample" src="~/controls/contentModule.ascx"/>
<add assembly="Subtext.Web.Controls" namespace="Subtext.Web.Controls" tagPrefix="module"/>
</controls>
</pages>
</system.web>
</configuration>
所以,这就是问题所在。如何在 web.config 文件中注册类型为"controls_example"的变量?
我是否需要:
- 添加"使用命名空间"?
- 在我的 web.config 中更改/添加某些内容?
- 没有定义变量的数据类型是什么?(我很想避免这种情况)
- 别的?
你的web.config
看起来不错。在页面中,需要添加包含控件命名空间的using
。然后,您可以使用页面的 LoadControl
方法来获取控件的实例,然后可以将其作为子控件添加到某个容器中(我通常选择一个asp:Placeholder
以确保它的位置是我想要的位置)
@Adrian,这是我对你问题的回答。我必须在这里说,因为我会远远超过我的字符限制。
好的,我遇到的第一个问题是我使用的是 ASP.NET 网站,而不是 ASP.NET 应用程序。我选择这个,所以我使用后者。这使得从那时起创建的所有页面默认情况下都有一个命名空间(即它们所在的文件夹的名称)。我不知道您是否可以使用网站中的命名空间注册控件,可能是因为网站默认情况下没有命名空间。
假设我制作了一个名为 myControl.ascx
的 Web 用户控件,并将其保存为 ~/controls/myControl.ascx
。查看 ascx 文件,顶行应为: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="myControl.ascx.cs" Inherits="myApplication.controls.myControl" %>
. myApplication
是网站的名称,您可以将其种子添加到命名空间controls
,因为这是它所在的文件夹。此外,如果您查看背后的代码,命名空间将匹配。
现在,从这里开始,您有 2 个有关如何注册和使用控件的选项。缓慢的方法是在拥有的每个页面上注册要使用的每个控件,如果每个控件只有几个,那就太好了。为此,请在要从中调用控件的页(例如索引页)中编写以下行:
<%@ Register TagPrefix="myC" TagName="myCoolControl" Src="~/control/myControl.ascx" %>
这是缓慢的方法,但它有效(除非我输入错误的内容)。
这就是我试图做的:这样我就不必键入一千次,并且只在web.config
文件中键入一次。
将web.config
文件配置为如下所示:
<configuration>
<system.web>
<pages>
<controls>
<add tagPrefix="myCont" namespace="myApplication.controls" assembly="myApplication" />
</controls>
</pages>
</system.web>
</configuration>
这将自动注册在"myApplication.controls"命名空间中创建的任何控件,如果设置正确,则它是在"控件"文件夹中创建的任何控件。请记住,您不必将文件夹称为"控件"即可正常工作,您可能在此处列出了任何命名空间,它应该可以正常工作。
现在打开一个要从编程(如索引)加载控件的页面。您不会在 aspx 文件中写入任何内容,包括有关注册页面的任何内容。该控件已经注册,所以我们所要做的就是将其加载到代码隐藏中:
myControl myCont = LoadControl("~/controls/myControl.ascx") as myControl;
//feel free to use the variable, or add it to the page with a panel or something
我真的希望这回答了你的问题。我确实需要一些挖掘才能让它工作,所以我很高兴帮助其他人解决这个问题。再次感谢CyberDude,是他让我朝着正确的方向前进。