從 ASP.NET 1.0 版開始,Web 窗體已成為 ASP.NET 中的核心功能。ASP.NET 4 在這方面做了許多改進,例如以下方面:
可以設(shè)置 meta 標(biāo)記。
加強對視圖狀態(tài)的控制。
支持最近引入的瀏覽器和設(shè)備。
可以更方便地使用瀏覽器的功能。
支持對 Web 窗體使用 ASP.NET 路由。
加強對生成的 ID 的控制。
可以將所選行保留在數(shù)據(jù)控件中。
加強對 FormView 和 ListView 控件中呈現(xiàn)的 HTML 的控制。
支持數(shù)據(jù)源控件的篩選。
Page類增加了兩個屬性:MetaKeywords和MetaDescription。這兩個屬性所表示的是HTML中的meta標(biāo)記。如下面的示例所示:
這兩個屬性的工作方式與Title屬性相似,可以在@Page指令中對其進行設(shè)置。
Control 類增加了一個新屬性:ViewStateMode。使用該屬性,可以針對頁面上未顯式啟用視圖狀態(tài)的所有控件禁用視圖狀態(tài)。視圖狀態(tài)數(shù)據(jù)包含在頁面的HTML中,
視圖狀態(tài)數(shù)據(jù)包含在頁面的 HTML 中,將會使頁面的請求和響應(yīng)延長所用時間。存儲多余的視圖狀態(tài)將會導(dǎo)致性能顯著降低。在 ASP.NET 的早期版本中,可通過禁用特定控件的視圖狀態(tài)來減輕視圖狀態(tài)對頁面性能的影響。但是有時,與為多數(shù)不需要視圖狀態(tài)的控件禁用該狀態(tài)相比,為少數(shù)需要視圖狀態(tài)的控件啟用該狀態(tài)更加簡便。
ASP.NET 包含一項名為“瀏覽器功能”的功能,可用于確定用戶使用的瀏覽器的功能。瀏覽器功能由存儲在 HttpRequest.Browser 屬性中的 HttpBrowserCapabilities 對象表示。有關(guān)特定瀏覽器功能的信息由瀏覽器定義文件定義。在 ASP.NET 4 中,這些瀏覽器定義文件已更新為包含有關(guān)最近引入的瀏覽器和設(shè)備(如 Google Chrome, Research in Motion BlackBerry 智能電話和 Apple iPhone)的信息?,F(xiàn)有的瀏覽器定義文件也已更新。
下面的列表顯示了 ASP.NET 4 附帶的瀏覽器定義文件:
blackberry.browser
chrome.browser
Default.browser
firefox.browser
gateway.browser
generic.browser
ie.browser
iemobile.browser
iphone.browser
opera.browser
safari.browser
ASP.NET 4 包含一項稱為“瀏覽器功能提供程序”的新功能。顧名思義,此功能可用于構(gòu)建一個提供程序,該提供程序又可用于編寫自定義代碼以確定瀏覽器功能。
在 ASP.NET 3.5 版 Service Pack 1 中,需要在一個 XML 文件中定義瀏覽器功能。該文件位于計算機級文件夾或應(yīng)用程序級文件夾中。大部分開發(fā)人員不需要自定義這些文件,但對于需要的人員,使用提供程序的方法比處理復(fù)雜的 XML 語法更為簡便。通過提供程序方法可以簡化進程,方法是實施一種通用瀏覽器定義語法或包含最新瀏覽器定義的數(shù)據(jù)庫,甚至是用于此類數(shù)據(jù)庫的 Web 服務(wù)。
ASP.NET 4 增加了對使用 Web 窗體進行路由的內(nèi)置支持。路由是 ASP.NET 3.5 SP1 引入的一項功能,通過此功能可將應(yīng)用程序配置為使用對用戶和搜索引擎有意義的 URL,這樣無需指定物理文件名。使用這項功能,可以提高站點的用戶友好度,并增加站點內(nèi)容被搜索引擎發(fā)現(xiàn)的概率。
例如,顯示應(yīng)用程序中產(chǎn)品類別的某個頁面的 URL 如下面的示例所示:
http://website/products.aspx?categoryid=12
通過路由功能,可以使用下面的 URL 呈現(xiàn)相同的信息:
http://website/products/software
第二個 URL 使用戶了解將獲得的內(nèi)容,并且可以顯著提高在搜索引擎搜索結(jié)果中的排名。
新功能包括:
PageRouteHandler 類是一個用于定義路由的簡單 HTTP 處理程序。您不必再編寫自定義路由處理程序了。
HttpRequest.RequestContext 和 Page.RouteData 屬性可方便用戶訪問 URL 參數(shù)中傳遞的信息。
The RouteUrl 表達式提供了在標(biāo)記中創(chuàng)建路由 URL 的簡單方法。
The RouteValue 表達式提供了提取標(biāo)記中的 URL 參數(shù)值的簡單方法。
RouteParameter 類便于將 URL 參數(shù)值傳遞到數(shù)據(jù)源控件的查詢(類似于 FormParameter)。
您不必再更改 Web.config 文件以啟用路由了。
6.設(shè)置客戶端 ID
服務(wù)器控件新增加的ClientDMode屬性可方便用戶編寫引用服務(wù)器控件呈現(xiàn)的HTML元素的客戶端腳本。Microsoft Ajax的使用日益增多,因此需要進行此操作的情況是越來越多。例如,你可以有一個用于呈現(xiàn)很長的產(chǎn)品價目表的數(shù)據(jù)控件,并且希望使用客戶端腳本令Web服務(wù)在各個價格變化時對其進行調(diào)用和更新,而不刷新整個頁面。
通常情況下,可使用document.GetElementById方法在客戶端腳本中獲得對HTML元素的引用。你需要將引用的HTML元素的id屬性值傳遞到該方法。對于ASP.NET服務(wù)器控件呈現(xiàn)的元素,ASP.NET的早期版本可能難以實現(xiàn)上述操作。并非總能預(yù)測ASP.NET將生成id值,而ASP.NET也可能生成很長的id值。
ASP.NET 4增加了兩種用于生成id特性的新算法。這些算法可以生成更易用的客戶端腳本的id,因為它們的可預(yù)測性更強,并且由于生成的更簡潔因而使用起來更方便。
使用GridView和ListView控件時,用戶可以選擇一行。在ASP.NET的早期版本中,行選擇是基于頁面的行索引進行的。例如,如果選擇頁面1上的第三個項,然后移至頁面2,則會選定頁面2上的第三個項。在大多數(shù)情況下,更理想的情況是不選擇頁面2上的任何行。ASP.NET 4 支持持久化選擇,這項新功能最初僅在.NET Framework 3.5 SP1中的動態(tài)數(shù)據(jù)項目中提供。啟用此功能后,將基于行數(shù)據(jù)鍵選擇項。這意味著,如果選擇頁面1上的第三行,然后移到頁面2,則不會先定頁面2上的任何內(nèi)容。當(dāng)您移回頁面1時,仍將選定第三個行。與ASP.NET 早期版本中的行為相比,這種行為自然得多。目前針對所有項目中的GridView和ListView控件支持持久化選擇。例如,您可以通過設(shè)置GridView控件中的EnablePersistedSelection屬性啟用此功能,如下面的示例所示:
<asp:GridView id="GridView2" runat="server" PersistedSelection="true">
</asp:GridView>
8.FormView 控件增強功能
ASP.NET 4對ForumView控件進行了改進,使用CSS簡化了控件內(nèi)容的樣式設(shè)置。在ASP.NET的早期版本中,F(xiàn)ormView控件使用項模板呈現(xiàn)內(nèi)容。這使得在標(biāo)記中進行樣式設(shè)置十分困難,因為控件會呈現(xiàn)意外的表行和表單元格標(biāo)記。FormView控件支持ASP.NET 4中的屬性RenderOuterTable。當(dāng)此屬性設(shè)置為false時(如下面的示例所示),不會呈現(xiàn)表標(biāo)記。這樣更容易對控件內(nèi)容應(yīng)用CSS樣式。
<asp:FormView ID="FormView1" runat="server" RenderTable="false">
ASP.NET 3.5 中引入的 ListView 控件具備 GridView 控件的所有功能,同時使您可以全面控制輸出。在 ASP.NET 4 中,簡化了此控件的使用。該控件的早期版本要求您指定布局模板,其中包含一個具有已知 ID 的服務(wù)器控件。下面的標(biāo)記顯示了在 ASP.NET 3.5 中使用 ListView 控件的典型示例。
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder>
</LayoutTemplate>
<ItemTemplate>
<% Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
在 ASP.NET 4 中,ListView 控件不需要布局模板。上面示例中的標(biāo)記可以替換為下面的標(biāo)記:
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<% Eval("LastName")%>
</ItemTemplate>
</asp:ListView>
對于創(chuàng)建數(shù)據(jù)驅(qū)動的網(wǎng)頁的開發(fā)人員,一項十分常見的任務(wù)就是篩選數(shù)據(jù)。該任務(wù)的傳統(tǒng)執(zhí)行方法是在數(shù)據(jù)源控件中生成 Where 子句。這種方法可能十分復(fù)雜,而且在某些情況下,通過 Where 語法無法充分利用基礎(chǔ)數(shù)據(jù)庫的全部功能。
為簡化篩選操作,ASP.NET 4 中增加了一個新的 QueryExtender 控件??梢詫⒋丝丶砑拥?EntityDataSource 或 LinqDataSource 控件以篩選這些控件返回的數(shù)據(jù)。QueryExtender 控件依賴于 LINQ,但您無需了解如何編寫 LINQ 查詢即可使用該查詢擴展程序。
QueryExtender 控件支持多種篩選選項。下表列出了 QueryExtender 的篩選選項。
術(shù)語 | 定義 |
---|---|
SearchExpression | 搜索一個或多個字段中的字符串值,并將這些值與指定的字符串值進行比較。 |
RangeExpression | 在一個或多個字段中搜索由一對值指定的范圍內(nèi)的值。 |
PropertyExpression | 對指定的值與字段中的屬性值進行比較。如果表達式的計算結(jié)果為 true,則返回所檢查的數(shù)據(jù)。 |
OrderByExpression | 按指定的列和排序方向?qū)?shù)據(jù)進行排序。 |
CustomExpression | 調(diào)用一個函數(shù),用于定義頁面中的自定義篩選器。 |