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