【问题标题】:ASP.Net C# reference to element on Site.master returns: Object reference not set to an instance of an objectASP.Net C# 对 Site.master 上元素的引用返回:对象引用未设置为对象的实例
【发布时间】:2017-02-06 15:56:12
【问题描述】:

我在 Default.aspx 和 Default.aspx.cs 中找到了解决此问题的线程,但将这些解决方案应用于我的问题并不能解决我的问题。在这种情况下,它们都没有帮助:

我正在尝试访问 Default.aspx.cs 中 Site.master 页面上的元素。如果不满足某个条件,我想隐藏这个元素。但是,我无法引用我的 Site.master 页面中的任何元素(在 Default.aspx.cs 或 Site.master.cs 中)

代码:

Site.master:

<li><a runat="server" id="editLink" href="~/Edit">Edit</a></li>

默认.aspx.cs:

MasterPage master = this.Master;
Control linkControl = master.FindControl("editLink");
linkControl.Visible = false;

我也试过了:

Site.master:

<asp:Panel ID="Panel1" runat="server">
    <li><a runat="server" id="editLink" href="~/Edit">Edit</a></li>
</asp:Panel>

默认.aspx.cs:

((Panel)Master.FindControl("Panel1")).Visible = false;
//or..
//Panel testPanel = ((Panel)Master.FindControl("Panel1"));
//Panel1.Visible = false;

我不知道从哪里开始。谢谢!

编辑:

我尝试应用以下解决方案:

ASP.NET - Accessing Master Page elements form the Content Page

What is a NullReferenceException, and how do I fix it?

具体从一开始:

将以下内容添加到 Default.aspx

<%@ MasterType virtualpath="~/Site.master" %>

将以下内容添加到 Default.aspx.cs

Panel testPanel = (Panel)Master.FindControl("Panel1");       
testPanel.Visible = true;

上面的代码是第一个线程的建议修复,但我得到了同样的错误。第二个线程似乎暗示我在创建之前引用了该元素,因此返回了 nullreferenceexception 错误,但我不认为是这种情况。最终,我对使用这些线程的理解还不够。

编辑

Site.master MCVE:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="SiteMaster" %>

<form id="wrapForm" runat="server">
    <asp:ScriptManager runat="server" EnablePageMethods="true"></asp:ScriptManager>
    <asp:ContentPlaceHolder ID="MainContent" runat="server">
      <asp:Panel ID="Panel1" runat="server">Test Text</asp:Panel>
    </asp:ContentPlaceHolder>
</form>

Default.aspx.cs MCVE:

protected void Page_Load(object sender, EventArgs e)
{
    Panel testPanel = (Panel)Master.FindControl("Panel1"); 
    testPanel.Visible = true;
}

【问题讨论】:

  • 您没有显示控件在母版页中的上下文。是否在另一个控件中?它有助于制作MCVE
  • 也许您的开发网络服务器仍在加载旧程序集?完全关闭服务器并重建/运行可能是一个想法。
  • @mason 我试图添加一个 MCVE - 从 Site.master 中剥离所有内容,并仅包含来自 Default.aspx.cs 的 Page_Load 方法。如果我做错了,请告诉我。谢谢!
  • @Igor 已编辑,因为我不相信这些线程中的任何一个都有帮助 - 我试图在这些特定线程中使用解决方案,但它们似乎没有帮助

标签: c# asp.net .net


【解决方案1】:

MasterType ASP.NET - Accessing Master Page elements form the Content Page 应该是Reference 吗?

<%@ Reference virtualpath="~/Site.master" %> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多