【问题标题】:ASP.NET User Control instance is null when referenced on Page_Load on page code behind在页面代码后面的 Page_Load 上引用 ASP.NET 用户控件实例时为空
【发布时间】:2012-04-26 20:02:11
【问题描述】:

我有一个我已经编写并添加到 ASP.NET 页面的用户控件,并且功能正常。但是,我试图在 Page_Load 上从后面的代码中引用该自定义控件中的一个属性,但不能,因为该实例的可访问变量为空。

这对于用户控件和 Page_Load 是否正常?如果是这样,我怎样才能引用控件的实例以访问其公共属性?这是我在呈现页面之前需要做的事情,以便初始化一些变量。

【问题讨论】:

  • 您应该能够在 Page_Load 方法中引用您的用户控件。请在后面显示您的标记和代码。在标记示例中,请包含 标签。

标签: asp.net user-controls pageload


【解决方案1】:

我遇到了同样的问题,结果是我错误地注册了我的自定义控件。

正确定义:

<%@ Register Src="PeriodControl.ascx" TagName="PeriodControl" TagPrefix="ucs" %>

定义不正确:

<%@ Register TagPrefix="ucs" Namespace="MyWebsite" Assembly="MyWebsite" %>

唯一的区别是直接引用 ascx 文件而不是程序集中的控件。算了!?

【讨论】:

  • 如果用户控件实际上在程序集中(ascx 在 DLL 中而不是在站点中),你会怎么做。我通常使用 Web 部署项目将所有常用的用户控件编译到 DLL 中。 VS2012 不支持该项目类型,但您可以将站点编译为程序集,VS 会读取它.. 但我不知道如何正确注册,因此用户控件上的控件不为空。
  • 我不确定。如果它是从 dll 引用的,它可能会出现在您的工具箱中,您可以将它拖到您的页面上。然后VS会为你创建注册标签:)这就是我能想到的。希望对您有所帮助...
  • 我苦苦挣扎了 2 个小时,终于找到了您的解决方案,效果非常棒。
  • ReSharper 似乎在默认情况下以上述“不正确的方式”注册用户控件,当您使用它的提示在键入时定位用户控件时......
  • 这很奇怪,但“不正确的定义”对我有用,直到今天。然后突然,由于未知的原因,我得到了一个 NullReferenceException。建议的修复工作有效,我注意到项目中的大多数@ Register 都在使用Src。感谢您的提示。
【解决方案2】:

您可能可以通过Page_PreRender 事件访问您的用户控件。

您可以找到有关page life cycle in asp.net here 的更多文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多