【问题标题】:null object reference in master pages母版页中的空对象引用
【发布时间】:2009-12-12 16:17:44
【问题描述】:

我的母版页中有一些控件,我想从其相关的 c# 类中访问它们..

例如我有:

<asp:DropDownList ID="ddlSearch" runat="server" 
                 onselectedindexchanged="ddlSearch_SelectedIndexChanged" 
                AutoPostBack="True">
            </asp:DropDownList>

我可以在编写代码时访问它,所以“它的属性正常”。

但在运行时我收到了

对象引用未设置为对象的实例。

你知道为什么吗?

我也试过这样找:

ContentPlaceHolder mpContentPlaceHolder =
        (ContentPlaceHolder)this.FindControl("ContentHead");
    if (mpContentPlaceHolder != null)
    {
        DropDownList ddlSearch =
             (DropDownList)mpContentPlaceHolder.FindControl("ddlSearch");
        if (!Page.IsPostBack)
            utils.fillDDLSearch(ddlSearch);
    }

但它也给出了 null ......这真的很奇怪......

我尝试使用另一个对象(一个 asp Image 控件,但问题完全相同。 在编译时一切正常,但在运行时给出 null 尽管它正确地找到了内容占位符。

有人知道这个问题吗?

错误:


对象引用未设置为对象的实例。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。


【问题讨论】:

  • 你能贴出抛出空引用异常的代码吗?

标签: c# asp.net


【解决方案1】:

您需要做的是强烈键入您的页面和母版页之间的关联。在 Page ascx 中将此行添加到顶部:

其中 ~/MasterPage.master 是对您的实际母版页的引用。

然后在您的页面中,您将能够通过以下方式访问任何控件、属性等:
Master.[PropertyNameHere] 减去 '[]'。

更多详情请见this

【讨论】:

  • 嗨,您可能在我的帖子中错过了这个:“我想从其相关的 c# 类中获取它们......”。所以我不在继承Master的另一个页面上,而是在Master后面的页面上:MasterPage.master.cs
  • 如果您想访问 MasterPage 的 MasterPage 代码隐藏中的下拉列表,您应该可以直接访问它 (utils.fillDDLSearch(ddlSearch);)。您不需要在页面上使用 FindControl。为什么要在 ContentPlaceHolder 中搜索它? DropDownList 是否真的在 ContentPlaceHolder 中?
  • 完全正确....我同意这一点,所以我首先尝试直接访问它...编译时一切正常,但在运行时不行...我也尝试使用其他对象,来自母版页,以及相同的行为......这就是为什么我试图用内容占位符找到它。 (也给出 null ......)
【解决方案2】:

我决定将这些组件放在用户控件中并在那里处理行为。 并将用户控件放在母版页中。

但是问题仍然不清楚: - 为什么母版页中的控件不能直接从 masterpage.cs 访问...?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多