【webabcd】溫故知新ASP.NET 2.0(C#)(1) - MasterPage(母版頁)

iDotNetSpace發表於2008-06-03
介紹
母版頁(MasterPage)就相當於模板頁,挺簡單的,沒什麼好說的。基於母版頁的常用的功能有:母版頁和內容頁之間資訊的傳遞,在內容頁中用FindControl方法找到內容頁中的控制元件等。另外,母版頁是可以巢狀的。


關鍵
在內容頁的頭部加上母版頁的強型別引用
--建立對母版頁的強型別引用,並指定到母版頁的虛擬路徑--%>
@ MasterType VirtualPath="~/MasterPage/MasterPage.master" %>

1、內容頁傳遞資料到母版頁 - 母版頁建立一個公共方法,然後內容頁通過“Master.方法”來呼叫這個公共方法

2、母版頁傳遞資料到內容頁 - 母版頁建立一個公共事件來傳遞資料,然後內容頁處理這個事件

3、內容頁中用FindControl方法找到內容頁中的控制元件 - 用“Master.FindControl("ContentPlaceHolder1").FindControl("你要查詢的控制元件ID")”來查詢

4、巢狀母版頁 - 說起來麻煩,看原始碼吧


示例
主母板頁
Site.master
@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    
<title>重新過一遍ASP.NET 2.0(C#)title>
head>
<body>
    
<form id="form1" runat="server">
        
<div>
            
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            
asp:ContentPlaceHolder>
        
div>
    
form>
body>
html>

次母板頁
MasterPage/MasterPage.master
@ Master Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile
="MasterPage.master.cs" Inherits="MasterPage_MasterPage" 
%>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    
<p>
        我是一個巢狀母版頁
    
p>
    
<p>
        母版頁中的內容
        
<asp:DropDownList ID="ddlMaster" runat="server" DataSourceID="XmlDataSource1" DataTextField="text"
            DataValueField
="value" AutoPostBack="True" OnSelectedIndexChanged="ddlMaster_SelectedIndexChanged">
        
asp:DropDownList><asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Config/DropDownListData.xml">
        
asp:XmlDataSource>
    
p>
    
<p>
        內容頁中的內容
        
<asp:ContentPlaceHolder ID="cph" runat="Server" />
    
p>
asp:Content>

MasterPage/MasterPage.master.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class MasterPage_MasterPage : System.Web.UI.MasterPage
{
    
protected void Page_Load(object sender, EventArgs e)
    
{

    }


    
/// 
    
/// 設定ddlMaster的選中索引
    
/// 這個方法由內容頁呼叫
    
/// 
    
/// 

    public void SetddlMaster(int index)
    
{
        ddlMaster.SelectedIndex 
= index;
    }


    
protected void ddlMaster_SelectedIndexChanged(object sender, EventArgs e)
    
{
        
// ddlMaster的選中索引改變後,激發SelectedIndexChanged_ddlMaster事件
        SelectedIndexChanged_ddlMaster(thisnew CommandEventArgs(ddlMaster.SelectedItem.Text, ddlMaster.SelectedValue));
    }


    
// 宣告一個公共時間事件,讓內容頁用
    public event CommandEventHandler SelectedIndexChanged_ddlMaster;
}


內容頁
MasterPage/Test.aspx
@ Page Language="C#" MasterPageFile="~/MasterPage/MasterPage.master" AutoEventWireup="true"
    CodeFile
="Test.aspx.cs" Inherits="MasterPage_Test" Title="MasterPage測試" 
%>

--建立對母版頁的強型別引用,並指定到母版頁的虛擬路徑--%>
@ MasterType VirtualPath="~/MasterPage/MasterPage.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cph" runat="Server">
    
<asp:dropdownlist id="ddlPage" runat="server" datasourceid="XmlDataSource1" datatextfield="text"
        datavaluefield
="value" autopostback="True" onselectedindexchanged="ddlPage_SelectedIndexChanged">
    
asp:dropdownlist>
    
<asp:xmldatasource id="XmlDataSource1" runat="server" datafile="~/Config/DropDownListData.xml">
    
asp:xmldatasource>
asp:Content>

MasterPage/Test.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class MasterPage_Test : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
// 在內容頁用FindControl方法找到內容頁中的控制元件
        DropDownList ddl = new DropDownList();
        ddl 
= Master.Master.FindControl("ContentPlaceHolder1").FindControl("cph").FindControl("ddlPage"as DropDownList;
        Master.Master.FindControl(
"ContentPlaceHolder1").FindControl("cph").Controls.Add(new LiteralControl("
內容頁中的DropDownList的ClientID是:
" + ddl.ClientID));

        
// 增加一個事件處理,該事件是在母版頁定義的一個公共事件
        Master.SelectedIndexChanged_ddlMaster += new CommandEventHandler(Master_SelectedIndexChanged_ddlMaster);
    }


    
void Master_SelectedIndexChanged_ddlMaster(object sender, CommandEventArgs e)
    
{
        
// CommandEventArgs已經在母版頁中的公共事件“SelectedIndexChanged_ddlMaster”中指定
        string selectedText = e.CommandName;
        
string selectedValue = e.CommandArgument.ToString();

        ddlPage.SelectedValue 
= selectedValue;
    }


    
protected void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
    
{
        
// 呼叫母版頁的方法
        Master.SetddlMaster(ddlPage.SelectedIndex);
    }

}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-330927/,如需轉載,請註明出處,否則將追究法律責任。

相關文章