【问题标题】:ASP.NET UserControl Does Not Initialize Child ControlsASP.NET UserControl 不初始化子控件
【发布时间】:2008-10-28 13:14:59
【问题描述】:

在我的页面中,我有以下内容:

<aspe:UpdatePanel runat="server" ID="updatePanel">
    <ContentTemplate>
        <local:KeywordSelector runat="server" ID="ksKeywords" />
    </ContentTemplate>
</aspe:UpdatePanel>

KeywordSelector 控件是我在同一个程序集中定义的控件,local 映射到它的命名空间。

该控件由其他几个控件组成,定义如下:

<%@ Control Language="C#" AutoEventWireup="true"
            CodeBehind="KeywordSelector.ascx.cs"
            Inherits="Keywords.KeywordSelector" %>

并且有很多自己的服务器控件,都定义为.designer.cs 文件中的成员。

但是,在控件的生命周期中,它没有任何子控件对象,也不会生成 HTML

  1. .designer.cs 文件中定义的所有成员都是null
  2. 调用HasControls返回false
  3. 致电EnsureChildControls 什么都不做。
  4. Controls 集合为空。

删除UpdatePanel 没有好处。我试图用新的UserControl 在干净的页面中重现它,但同样的事情发生了。

我正在使用 ASP.NET over .NET Framework 3.5 SP1 和集成 Web 服务器。

我在这里错过了什么?

更新 #1: 根据 Rob 的评论,我查看了 OnInit 并发现 UserControl 没有检测到它有任何子控件。而且,CreateControlCollection 永远不会被调用!

【问题讨论】:

  • 你是否覆盖了 OnInit 并删除了行 base.OnInit(e);发生意外?
  • 没有。我也刚刚检查过,它在我的 Page_Load 方法之前被调用,所以没关系,我猜。
  • 无赖 - 希望它会是一个简单的:)
  • 你是动态加载这个控件吗?
  • 不。也阅读这些内容...

标签: .net asp.net


【解决方案1】:

好吧,我找到了问题:

  1. 用户控件,与自定义控件相反,必须在web.config文件中一一注册。这样做:

    &lt;add tagPrefix="local" tagName="KeywordSelector" src="~/KeywordSelector.ascx" /&gt;

    代替:

    &lt;add tagPrefix="local" namespace="Keywords" assembly="Keywords" /&gt;

  2. 您永远不应将WebControl 与使用它的Control 放在同一目录中。这是彻头彻尾的愚蠢。 Read about it here.

感谢您的帮助。现在,如果我能将自己的答案标记为 the 答案...

【讨论】:

  • 很高兴它帮助了其他人:)
  • 刚刚花了几个小时试图解决这个问题!非常模糊的问题(在尝试 Bing 答案时误报太多)。谢谢!
  • 谢谢,这帮助我发现了一些奇怪的东西。您也可以在页面中
  • 除了更改web.config之外,我还必须将&lt;% Register %&gt;添加到页面中,格式为:&lt;%@ Register TagPrefix="custom" Namespace="CustomControls" Assembly="CurrentAssembly" %&gt;
【解决方案2】:

在我的情况下,原因是 Resharper 7.1 在 aspx 的顶部添加了不正确的 @Register 指令 - 而不是这个所需的行:

<%@ Register Src="~/Controls/Hello/Hello.ascx" TagName="Hello" TagPrefix="p" %>

我错了:

<%@ Register TagPrefix="p" Namespace="MyNamespace.WebApp.Controls" Assembly="MyApp.Web" %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多