在ASP.NET页面或母版页中注册.ascx ASP.NET用户控件会加载它吗?

5
如果我在ASP.NET页面中注册用户控件,那么该控件是否会加载到页面上?即使我没有使用它调用它吗?
因为我的代码的一部分即使我没有调用该控件也会执行,我在性能分析时发现了这一点。
以下是翻译后的格式要求结果:

如果我在ASP.NET页面中注册用户控件,那么该控件是否会加载到页面上?即使我没有使用它调用它吗?

<%@ Register Src=".." TagName="tag" TagPrefix="pre" %>

因为我的代码的一部分即使我没有调用该控件也会执行,我在性能分析时发现了这一点。

<pre:tag id='control123' />

你是否在VS的设计界面上拖动了控件?MyFile.aspx.designer.cs文件中是否有对该控件的引用? - Lloyd
你检查过渲染输出了吗? - Ravi Gadag
没有,我没有使用VS的设计界面拖动它,而且在designer.cs文件中也没有对该控件的引用。 - Owidat
没有任何输出被渲染出来,我并没有使用 <pre:tag id='control123' />,我只是将其注册了。 - Owidat
1
你的代码正在执行哪一部分? - Peter Porfy
有时候是Page_load,有时候是我的私有方法。 - Owidat
2个回答

7
在这种情况下,您的用户控件将在服务器端加载到页面对象中,这意味着它将随着ASP.NET应用程序的整个生命周期进行处理,但由于您没有创建控件实例,因此不会呈现任何输出HTML。您正在使用“type”而不是“instance”。
回答您的问题:是的,它将被加载,但不会呈现、绑定数据等。
编辑于2/7/2012:
如果您想摆脱注册指令,您始终可以使用web.config - 按照thisScottgu帖子的说明操作。

谢谢 @rwarzycha,好的,如何防止这种情况发生?即使已注册,我也不希望它加载。 - Owidat
你能提供更多的信息吗?为什么你不想要这个工作流程?这是按设计来的。你的情况是什么? - Rafał Warzycha
我的情况是,我们正在开发一个CMS,其中一个CMS功能是管理员用户(开发人员/设计师)可以通过创建主页面并向页面添加控件来创建动态页面,但有时他们会添加控件进行测试,然后将其删除,但他们忘记删除注册指令...但现在在阅读了Scottgu的帖子之后,我知道了解决我的情况的方法。感谢@rwarzycha。 - Owidat

1

Register指令只是用来创建前缀和控件之间的关联。它只在声明式加载控件时才有意义。它只是为了使开发变得容易。

除此之外,除非您在某个地方声明了控件的实例,否则Page_Load或任何私有方法都无法被调用。

此外,如果您在代码中没有使用<%@ Register %>,那么您不应该有Register指令。我认为Register指令不会导致这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接