全局定義頁特定配置設置,如配置文件範圍內的頁和控件的 ASP.NET 指令。能配置當前Web.config目錄下的全部頁面的設置。html
<pages buffer="[True|False]" enableEventValidation="[True|False]" enableSessionState="[True|False|ReadOnly]" enableViewState="[True|False]" enableViewStateMac="[True|False]" smartNavigation="[True|False]" autoEventWireup="[True|False]" pageBaseType="typename, assembly" userControlBaseType="typename" validateRequest="[True|False]" masterPageFile="file path" theme="string" styleSheetTheme="string" maxPageStateFieldLength="number" compilationMode="[Always|Auto|Never]" pageParserFilterType="string" viewStateEncryptionMode="[Always|Auto|Never]" maintainScrollPositionOnPostBack="[True|False]" asyncTimeout="number" > <controls> <add assembly="指定程序集的名稱" namespace="指定與標記前綴關聯的命名空間" src="指定文件的名稱" tagName="指定頁中要使用的控件的名稱而且還須要設置 src 屬性" tagPrefix="指定映射到源文件或命名空間和程序集的標記前綴"/> </controls> <namespaces> <add namespace="指定要在預編譯期間使用的命名空間" /> </namespaces> <tagMapping> <add mappedTagType="指定 tagType 要從新映射到的類型的名稱,新的控件名稱" tagType="指定要從新映射的標記的類型的名稱。原有ASP.NET控件的名稱" /> </tagMapping> </pages>
與Pages上的部分設置能夠在單獨頁面上經過@Page指令進行設置,Pages配置節的屬性是@Page指令的子集,二者的屬性說明則參考MSDN《pages 元素(ASP.NET 設置架構)》和《@ Page》。新建一個aspx頁面,就會看到頁面上的@Page命令 web
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="FastDoge.Study.WebForm2" %>
他們的做用是 緩存
Language:指定在對頁中的全部內聯呈現(<% %> 和 <%= %>)和代碼聲明塊進行編譯時使用的語言。值能夠表示任何 .NET Framework 支持的語言,包括 Visual Basic、C# 或 JScript。每頁只能使用和指定一種語言。 服務器
AutoEventWireup:指示頁的事件是否自動綁定。若是啓用了事件自動綁定,則爲 true;不然爲 false。默認值爲 true。 架構
CodeBehind:指定包含與頁關聯的類的已編譯文件的名稱。該屬性不能在運行時使用。 app
Inherits:定義供頁繼承的代碼隱藏類。它能夠是從 Page 類派生的任何類。它與 CodeFile 屬性(包含指向代碼隱藏類的源文件的路徑)一塊兒使用。 async
AutoEventWireup的具體做用是,把隱藏類中的頁事件的綁定方法(最多見的是Page_Load)自動綁定上去,由於通篇沒看到給Page類顯式綁定事件的代碼。假如將其設置成false,Page_Load方法不會執行。 ide
pages的子節點有三個:controls,namespaces和tygMappingthis
Namespaces與@Import指令 spa
用於指定頁面上的代碼所須要的命名空間,其實是給即時編譯的編譯器添加指定的命名空間
例如在webform中添加以下代碼
<form id="form1" runat="server"> <div> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { Thread.Sleep(6000); this.lb1.Text = "123 " + File.Exists(@"E:\123.txt"); } </script> <asp:Label ID="lb1" runat="server" /> </div> </form>
打開頁面則會發現預編譯出錯了
能夠在web.config中添加pages配置節
<pages> <namespaces> <add namespace="System.Threading"/> <add namespace="System.IO"/> </namespaces> </pages>
這樣運行就正常了
一樣也能夠在頁面上使用@Import命令
<%@ Import Namespace="System.IO" %>
一樣達到效果,通常狀況下創建項目後,web.config的pages/namespaces下添加了若干個命名空間,因此.NET 類庫裏面的一些類能被在頁面上調用,到後來的MVC裏面一樣有添加
但在MVC的Razor語法中,新增了@using語句,@Import使用變少了
Controls與@Register指令
定義標記前綴所在的 register 指令和命名空間的集合,我認爲是用於指定用戶控件和自定義控件。
在本次實踐中,鄙人寫了一個簡單的用戶控件MyLogin。
把它直接拖入WebForm2頁面中,自動生成的代碼以下所示
單純在單個頁面使用的話,引入非ASP.NET控件時須要用@Register聲明控件的前綴和標籤名,以及關聯的控件文件。若是不想在每一個頁面都如此聲明,則能夠在web.config中添加配置
關鍵看controls那一節。此時清除頁面上的@Register命令也不會出錯。
注意:須要在web.config中聲明控件的,控件文件*.ascx不能放在web.config的同層目錄,不然運行則會報錯。
controls 元素定義標記前綴所在的 register 指令和命名空間的集合。 此元素對應於 ASP.NET 頁上的 @ Register 指令。 使用 @ Register 指令能夠指定用戶控件的標記前綴。
標記前綴將 ASP.NET 中的命名空間與 COM 控件和用戶控件正常工做所需的程序集和命名空間相關聯。 下面的信息在配置 controls 元素時頗有用:
可使用相同的 tagPrefix 值來映射到多個程序集或命名空間。
在如下狀況中,使用 @ Register 指令:
使用 @ Register 指令引用控件時,能夠將控件的代碼放在如下位置:
對於聲明性用戶控件,請使用 tagname、tagprefix 和 src 特性。 在頁中聲明控件時,前兩個屬性老是以冒號分隔對 (tagprefix:tagname) 的形式一塊兒使用。 能夠將多個命名空間映射到同一 tagname,如如下示例所示:
<% @Register tagprefix="tag1" namespace="MyNamespace1"/>
<% @Register tagprefix="tag1" namespace="MyNamespace2"/>
src 特性值既能夠是相對路徑,也能夠是從應用程序的根目錄到用戶控件源文件的絕對路徑。 爲方便使用,建議使用相對路徑。 例如,假設將應用程序的全部用戶控件文件存儲在應用程序根目錄的子目錄 \Usercontrol 中。 若要包括 Usercontrol1.ascx 文件中的用戶控件,請在 @ Register指令中包含如下內容:
Src="~\usercontrol\usercontrol1.ascx"
代字號 (~) 字符表示應用程序的根目錄。
當包含已經編譯爲 .dll 文件供應用程序使用的自定義服務器控件時,請將 tagprefix 特性與 assembly 和 namespace 特性一塊兒使用。 若是沒有包含 namespace 特性,或者爲其分配了一個空字符串 (""),則會出現分析器錯誤。
tagMapping
定義一個標記類型的集合,這些標記類型在編譯時從新映射爲其餘標記類型。經過下面的例子就明白tagMapping的做用了。首先添加了一個Login控件
而後開始更改,添加一個類FDLogin去繼承Login控件,重寫Render方法
1 protected override void Render(HtmlTextWriter writer) 2 { 3 writer.BeginRender(); 4 5 writer.RenderBeginTag("h1"); 6 writer.Write("hello world"); 7 writer.RenderEndTag(); 8 writer.WriteBreak(); 9 10 writer.Write(@"<div> 11 Id:<input type=""text"" name=""loginId"" /> 12 </div> 13 <div> 14 Password:<input type=""password"" name=""password"" /> 15 </div> 16 <div> 17 <input type=""reset"" value=""Reset"" /> 18 <input type=""submit"" value=""login"" /> 19 <input type=""button"" value=""Regist"" /> 20 </div>"); 21 writer.EndRender(); 22 }
接着在web.config中添加
這樣就把Login控件給玩壞,在aspx頁面中添加的asp:Login控件所有變成經本人擴展後的FDLogin控件模樣。在不改任何頁面代碼的狀況下運行
在此次更改控件因爲不太會使用HtmlTextWriter,因此很挫地使用了Wirte方法直接寫html代碼,應該上網看看其餘控件的源碼纔對。瀏覽了一下源碼,控件的Render操做實際上也是在一個Adapter中進行。但這個Adapter就不是System.Web.Mobile下面的,是System.Web下的。