asp.net 母版頁的使用


本文轉自 http://whx.tzgt.gov.cn/newOperate/html/1/12/124/10711.html

為了減少在網頁設計時出現的變一頁則動全站的問題,vs2003升級到vs2005后增加了母版的概念。   你可以把它想像成為“網頁模版”,與之不同的是,再也不必每個頁面都去更新了,修改一次,所有的網頁都會改變,做到了一勞永逸。   下面先進行一個簡單的母版使用演示:   1、首先打開visual studio 2005,新建一個asp.net網站,文件系統,C#。   2、在解決方案資源管理器中,右鍵新建一個新項:   3、選擇母版頁:   4、打開MasterPage.master,里面有一個contentplaceholder控件,注意不要控件里面寫什么東西。   我們轉到設計視圖,在這個控件外面加上header和footer 兩句文本。   5、保存后我們就可以用它來做其它頁面了。有兩種方法,1是在母版頁任意位置右鍵,點擊添加內容頁;2 是在解決方案資源管理器上新建新項,在生成aspx頁面時勾選“選擇母版頁”   6、選擇相應的母版頁   7、在新生成的頁面源代碼只有這幾句:

  1. <%@PageLanguage="C#"MasterPageFile="~/MasterPage.master"AutoEventWireup="true"   CodeFile="Default2.aspx.cs"Inherits="Default2"Title="UntitledPage"%>
  2. <asp:ContentID="Content1"ContentPlaceHolderID="ContentPlaceHolder1"Runat="Server">
  3. </asp:Content>
  我們可以看到一個content控件,這個東西對應母版頁的ContentPlaceHolder1控件,轉換到視圖頁面:   8、其中頁頭和頁腳的文字都是灰色的,我們只能在 content中進行編輯。   保存后訪問default2.aspx這個頁面,F5.,我們看到頁面:

 

2、嵌套母版應用 嵌套母版頁其實是母版頁功能的高級應用,就是在大的母版頁中包含一個小的母版頁。這里需要注意的是,不管母版頁有無嵌套、或者有幾個嵌套,整個頁面構架中必須至少包含一個內容頁,因為母版頁本身是不能被用戶訪問到的。 以下是嵌套母版頁應用的簡略代碼: 大母版頁BigMasterPage.master:

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

< !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> < /head> < body>     < form id="form1" runat="server">     < div>大母版頁內容< /div>     < div>         < asp:contentplaceholder id="ContentPlaceHolder1" runat="server">         < /asp:contentplaceholder>     < /div>#p#分頁標題#e#     < /form> < /body> < /html>

大母版和簡單應用時的一樣,沒有什么變動.

小母版頁SmallMasterPage.master:

< %@ Master Language="C#" AutoEventWireup="true" CodeFile="SmallMasterPage.master.cs" Inherits="SmallMasterPage" MasterPageFile="~/MainMasterPage.master"%>     < asp:Content ID="SubContent" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">         < div>小母版內容< /div>         < div>             < asp:contentplaceholder id="ContentPlaceHolder2" runat="server">             < /asp:contentplaceholder>         < /div>     < /asp:Content>

這里看來小母版其實是一個帶有母版標記的特殊內容頁而已,Content控件之外只允許存在文件頭,和部分程序,拒絕存在html代碼等.

內容頁:Content.aspx:

< %@ Page Language="C#" MasterPageFile="~/SmallMasterPage.master" AutoEventWireup="true" CodeFile="Content.aspx.cs" Inherits="Content" Title="Untitled Page" %> < asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server"> 內容頁內容 < /asp:Content>

和簡單應用時也一樣,不過這里選用的母版是SmallMasterPage.master. 大家着重看藍色部分哦.運行結果:

3、訪問母版頁控件及屬性 在進行程序設計的時候,我們可能需要在內容頁中對母版頁進行操控.要訪問母版頁的的控件或屬性有以下幾種方法:

一、使用FindControl方法獲取母版頁控件的引用 利用內容頁page對象的Master公共屬性,我們可以實現對關聯母版頁的引用。進而使用母版頁的FindControl方法來實現對母版頁控件的訪問。 母版頁MasterPage.master:

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

< !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> < /head> < body>     < form id="form1" runat="server">     < asp:Label runat="server" ID="masterlabel">母版頁的內容< /asp:Label>     < div>         < asp:contentplaceholder id="ContentPlaceHolder1" runat="server">         < /asp:contentplaceholder>     < /div>     < /form> < /body> < /html>

內容頁Content1.aspx:

< %@ Page Language="C#" MasterPageFile="~/MasterPage1.master" AutoEventWireup="true" CodeFile="content1.aspx.cs" Inherits="content1" Title="Untitled Page" %> < script runat="server">     void Page_LoadComplete(Object sender, EventArgs e)     {         contentlabel.Text = (Master.FindControl("masterlabel") as Label).Text;     } < /script> < asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> < asp:Label ID="contentlabel" runat="server">這里將顯示母版頁masterlabel控件的內容。< /asp:Label> < /asp:Content> 其中,“Page_LoadComplete”是內容頁面加載完成時觸發的一個事件。 運行結果:

二、使用MasterType指令獲取母版頁控件的引用 相對於上面的FindControl方法而言,MasterType顯得很直接。通過使用MasterType,可以創建與母版頁的強類型引用。

將FindControl方法例子中的MasterPage.master更改如下:

< %@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage1.master.cs" Inherits="MasterPage1" %> < script runat="server">     public Label MasterPageLabel//注意:將母版頁label控件強類型化,方便內容頁訪問。對母版頁屬性的訪問也使用該方法。     {         get#p#分頁標題#e#         {             return masterlabel;         }         set         {             masterlabel = value;         }     } < /script> < !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> < /head> < body>     < form id="form1" runat="server">     < asp:Label runat="server" ID="masterlabel">母版頁的內容< /asp:Label>     < div>         < asp:contentplaceholder id="ContentPlaceHolder1" runat="server">         < /asp:contentplaceholder>     < /div>     < /form> < /body> < /html>

將FindControl方法例子中的Content1.aspx更改如下:

< %@ Page Language="C#" MasterPageFile="~/MasterPage1.master" AutoEventWireup="true" CodeFile="content1.aspx.cs" Inherits="content1" Title="Untitled Page" %> < %@ MasterType VirtualPath="~/MasterPage1.master" %> < script runat="server">     new void Page_Load(Object sender, EventArgs e)     {         contentlabel.Text = Master.MasterPageLabel.Text;     } < /script> < asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> < asp:Label ID="contentlabel" runat="server">這里將顯示母版頁masterlabel控件的內容。< /asp:Label> < /asp:Content>

4、母版頁應用范圍配置 以上實例都是頁面級母版頁應用,只要在對應內容頁頁面頭部聲明或設置即可。 如果是程序級母版頁應用,應在Web.config中作以下設置: < configuration>    < system.web>      < pages MasterPageFile="~/MasterPage.master" />    < /system.web> < /configuration> 屏蔽某個文件夾使用該母版方案,可以通過在該文件夾下放置不同的web.config文件來實現。 屏蔽某個文件使用該母版方案,可以通過設置.aspx頁面頭部來實現: < %@ Page Language="C#" MasterPageFile="~/OtherMasterPage.master" %> 如果不想使用母版,可以把MasterPageFile屬性值留空即可。

 

5.

在母版頁中使用javascript 時,使用javascript 獲得對象, 比如頁面現有一個TextBox控件 < asp:TextBox id="userName" runat="server"> 使用javascript var mm=document.all.userName; 報告的錯誤為對象為空或者對象不存在 查看生成的網頁的源碼,發現 ID 為userName 的TextBox 被解析為 < input name="_ctl0:_ctl0:DownStageMainContent:DownStagesubContent:userName" type="text" id="_ctl0__ctl0_DownStageMainContent_DownStagesubContent_userName" /> 原來加入母版頁后會在服務器控件的前面自動添加一個字符串,在這里是_ctl0__ctl0_DownStageMainContent_DownStagesubContent 客戶端的控件不受影響 如何獲得控件對象呢? 解決方法1 document.getElementById('< %=userName.ClientID %>')

解決方法2 < asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">      < script type="text/javascript">         function yanzheng()         {             var tt=document.getElementById("ctl00$ContentPlaceHolder1$mingzi");             tt.value=tt.value.replace(" ","");             if(tt.value=="")             {                 window.alert("用戶名不能為空!");                 return false;             }             tt=document.getElementById("ctl00$ContentPlaceHolder1$xx");             tt.value=tt.value.replace(" ","");             if(tt.value=="")             {                 window.alert("密碼不能為空!");                 return false;             }         }     < /script>     < asp:TextBox ID="mingzi" runat="server" MaxLength="10">< /asp:TextBox>     < asp:TextBox ID="xx" runat="server" MaxLength="10">< /asp:TextBox>     < input id="date" runat="server" maxlength="10" name="date" onclick="new Calendar().show(this);"         readonly="readonly" size="10" type="text" />     < asp:Button ID="SaveInfo" runat="server" Text="添加" CssClass="but"                     OnClientClick="return yanzheng()" />

< /asp:Content>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM