2010-10-18 74 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

相關問題