我发现线程在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>
Default.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>
Default.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;
}
答案 0 :(得分:1)
MasterType
&lt; =根据ASP.NET - Accessing Master Page elements form the Content Page应该Reference
?
<%@ Reference virtualpath="~/Site.master" %>