在asp.net中设置子母版页中控件的可见性的问题

时间:2011-05-01 22:33:29

标签: c# asp.net master-pages nested

我有一个父母版页(Master.Master)和子母版页(Child.Master)。 Child.Master继承Master.Master主页文件。现在在Child.Master中我想将Div(其ID为Div1)的可见性设置为false,我正在使用以下代码:

protected void Page_Load(object sender, EventArgs e)
{
   this.FindControl("Div1").Visible = false;
}

以下是Child Master Page文件中的代码:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Webstore.Master.cs" Inherits="WebStore.WebStoreMaster" MasterPageFile="~/Login.Master" %>
<asp:Content ID="UserMaster" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">    
<div id="Div1" runat="server">
<div id="Sidebar" runat="server" style="float: left; margin-top: 100px; margin-right: 20px;">
</div>
</div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>

</asp:Content>

编译器给出了以下错误:

Object reference not set to an instance of an object.

有人可以解释为什么会这样吗??

感谢您的期待

4 个答案:

答案 0 :(得分:5)

编辑:

在这种情况下,如果div是顶级元素,并且您位于div所在的子母版页的page_load中,那么您应该能够做到

Div1.Visible = false;

为什么不使用Panel控件?

答案 1 :(得分:2)

你应该说

this.Master.FindControl("Div1").Visible = false;

答案 2 :(得分:1)

答案 3 :(得分:1)

加载主页面是在page_load之后。因此,当您尝试在page_load期间寻址母版页时,它的属性和方法尚不可用。在页面生命周期中将其向下移动。 ASP.NET Page Life cycleAnother SO answer on Masterpage/page life cycle。在page_load期间加载子master,并在子master page_load期间加载父master。