本人剛學習VS2.0,諸多問題,請勿見笑。
1.專案從2003轉換成2005版本:用VS2005直接開啟專案檔案就會自動轉換,注意儲存備份,不然轉換失敗還可以恢復。
2.似乎2005中.cs檔案裡控制元件的宣告都取消了,所以我一個js內部嵌入了一個Literal控制元件,轉換後.cs檔案裡就說已經有了宣告,註釋掉就可以了。
3.轉換後執行後發現報錯:
Parser Error Message: Unrecognized configuration section ’xhtmlConformance’
Source Error:
是隻要在IIS裡的ASP.net選項卡中選擇到2.0就可以了。
- 如同使用Theme可以格式化整個網站各個控制元件的顯示模式一樣,Master Page可以用來定義網站中不同網頁的相同部分,例如整個網站都包括同樣的格局,同樣的頁頭,同樣的頁尾,同樣的導航欄。這個時候,可以把這些控制元件定義在一個masterpage上。其他網頁只需要繼承這個Masterpage即可。
- Master page檔案本身的寫法和其他aspx頁面並沒有什麼不同,主要的區別在於,Master page包含一個ContentPlaceHolder ,這個控制元件定義了一些可以被其他頁面繼承的區域,該區域內可以被其他頁面用來擺放自己的控制元件。
eg: Master page檔案MyMaster.master
<%@ Master Language="VB" CodeFile="MyMaster.master.vb" Inherits="MyMaster" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> <br /> <asp:AdRotator ID="AdRotator1" runat="server" DataSourceID="XmlDataSource1"/> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/ads.xml"> </asp:XmlDataSource> </div> </form> </body> </html>
Master page檔案可以擁有自己的伺服器端程式碼檔案,該檔案定義了一個contentplaceholder控制元件為了給繼承的頁面使用控制元件定義了一個AdRotator(廣告)控制元件和它關聯的資料來源XmlDataSource 任何繼承MyMaster.master的aspx檔案都會在下方有一個廣告條!
format.aspx
<%@ Page Language="VB" MasterPageFile="~/MyMaster.master" AutoEventWireup="false" CodeFile="frommaster.aspx.vb" Inherits="frommaster" title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <asp:Label ID="Label1" runat="server" Text="name"></asp:Label> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="submit" /> <br /> <asp:Label ID="Label2" runat="server"> </asp:Label> </asp:Content>
注意事項
- 1.在*.aspx檔案中無法動態的改變*.master檔案中的控制元件的狀態
- 2.如果在Master Page中定義了Theme,VS2005會進行警告。實際執行將以子頁面的theme為基準
- 3.在web.config中可配置master page為整個站點使用
<configuration> <system.web> <pages masterPageFile="~/Site.master" /> </system.web> </configuration>
- 4.動態應用Master Page
void Page_PreInit (Object sender, EventArgs e) { Page.MasterPageFile = "~/Site.master"; }
- 5.操作Master Page中的控制元件 (弱型別)
<asp:Label ID="Title" RunAt="server" /> ((Label) Master.FindControl ("Title")).Text = "Orders";
- 6.操作Master Page中的控制元件 (強型別)
<asp:Label ID="Title" RunAt="server" /> . . . <script language="C#" runat="server"> public string TitleText { get { return Title.Text; } set { Title.Text = value; } } </script> content page加入如下宣告 <%@ MasterType VirtualPath="~/Tree.master" %> 這樣Asp.net編譯器會為我們生成一個強型別的Master屬性(在頁面檔案的CS檔案的類中). 這樣,我們就可以直接通過Master.Info來操作MasterPage上的東西. 呼叫如下 Master.TitleText = "Orders";
- 7.響應Master Page的事件
ContentPage要響應MasterPage頁上某些控制元件的事件(例如:Button).
和Scenario 1提到的一樣,可以把MasterPage的Button當做屬性暴露出來,
在ContentPage頁對其的Click事件進行訂閱.但這樣造成MasterPage和ContentPage頁的藕合太高.
更好的Pattern應該是在App_Code中定義事件,委託.在MasterPage中定義事件,並且暴露該事件.
這樣在ContentPage中就可以訂閱該事件.
- 8.Master Page巢狀
Master Page可以巢狀使用,巢狀的Master Page只能含有Content控制元件,
但Content控制元件本身可以再巢狀 ContentPlaceHolders控制元件。
<!-- Orders.Master --> <%@ Master MasterPageFile="~/Site.Master" %> <asp:Content ContentPlaceHolderID="..." RunAt="server"> <asp:ContentPlaceHolder ID="..." RunAt="server"> ... </asp:ContentPlaceHolder> <asp:Content>