2010-10-18 75 views
0

这是我的母版页的代码如何在母版页中使用JavaScript在我的子页面中引用PlaceHolder?

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:PlaceHolder ID="phMenu" runat="server"></asp:PlaceHolder> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolderBody" runat="server"> 
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
    <script type="text/javascript" language="javascript"> 
     function showHideMasterPageContent() { 
      debugger; 
      var phMenu = document.getElementById("<%=phMenu.ClientID%>"); 
//   phMenu.style.display = 'none'; 

     } 
    </script> 
</body> 
</html> 

这是我Childpage代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/SiteMaster.master" AutoEventWireup="true" 
    CodeBehind="ChildPage1.aspx.cs" Inherits="ChildPage_Call_Js_in_MasterPage.ChildPage1" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderBody" runat="server"> 
    <script type="text/javascript" language="javascript"> 
     $(document).ready(function() { 

      debugger; 
      showHideMasterPageContent(); 
     }); 


    </script> 
</asp:Content> 

现在我想做的是,使用JavaScript,隐藏在childpage了“phMenu”的内容。 为此,我在母版页中写了一个名为“showHideMasterPageContent”的函数,我在子页面中调用该函数。

我的问题是,我得到一个空引用,因为显然,当我看到源代码时,我看到只显示了phMenu的内容,而不是phMenu控件本身。现在如何在JS中引用phMenu?

回答

0

你是对的。一个PlaceHolder控件就是这样。它只渲染内容,并且没有为自己渲染标签。

如果你想这样做,那么你应该用div(或者一个asp面板,如果你喜欢的话)包围占位符。

 <div id="phMenuContainer"> 
      <asp:PlaceHolder ID="phMenu" runat="server"></asp:PlaceHolder> 
     </div> 

 <asp:Panel ID="phMenuContainer" runat="server"> 
      <asp:PlaceHolder ID="phMenu" runat="server"></asp:PlaceHolder> 
     </asp:Panel> 

在这里,你可以隐藏phMenuContainer DIV,而不是phMenu占位符。但请记住,如果您选择使用面板,则必须通过其ClientID来引用该控件。

<%=phMenuContainer.ClientID %> 
1

在ASP.NET 4.0中,您可以设置ClientIDMode属性。它不适用于占位符,但适用于面板。这会给你一个可靠的客户端ID,你可以通过Javascript进行管理。

http://www.west-wind.com/weblog/posts/54760.aspx

+0

嘿家伙感谢您的答案。我忘了补充一点,这个主页是我的团队在4个月前开发的,他们在继承这个主页的其他页面上的许多地方使用“document.getElementById(”....“)”来引用这个phMenu的内容。 除此之外,我们还在这些子页面上使用Telerik RadControls,这些子页面也使用了一些指向phMenu内控件的javascript。 – Sandeep 2010-10-18 17:43:32

+0

该框架是3.5SP1,所以没有ClientID模式attirbute :(现在,如果我围绕占位符添加div或另一个面板,很可能ASP.NET命名层次结构将踢入并更改所有内容的客户端ID。 。然后可以打破在过去几个月中添加了很多JS代码..是否有任何安全的方式来做到这一点,而不会造成回归问题? – Sandeep 2010-10-18 17:43:54

+0

如果您在广告中有一个ID为DIV的DIV应该除非您将runat =“server”添加到ID,否则不要更改ID。 – nopuck4you 2010-10-18 18:02:08

相关问题