ASP.NET4.0新特性

在以前試用VS2010的時候已經關注到它在Web開發支持上的一些變化了,爲此我還專門做了一個ppt,當初是計劃在4月12日那天講的,結果因爲莫名其妙的原因導致沒有語音以致放棄在LiveMeeting上的這次講課,也導致了本篇的產生。

新增了項目模板
 
在創建Web項目時可以看到增加了更多的Web項目模板
在VS2008中對應的情況如下:
 
在新模板中有如下改進:
基礎MemberShip功能。在大多數網站和應用程序中需要進行認證,因此在新模板中增加了認證功能使得用戶能在Web項目中隊身份認證快速上手,有關身份驗證的模塊的文件都放在Account文件夾下;
增加了默認的母版頁。使用母版頁能比較方便地統一網站網頁的展示,如涉及到網頁頂部、用戶登錄狀態顯示及菜單部分,默認的母版頁文件名爲Site.master;
增加了默認的css樣式文件。使用css樣式文件能使我們很方便地調整網站風格,在新建網站時會增加一個名爲Site.css的樣式文件,它位於Styles文件夾下;
迷你的web.config文件。在VS2010中web.config文件都很小,大部分的配置都被放在machine.config文件中;
集成jQuery。jQuery是一個非常強大的javascript類庫,它可以讓Web開發人員很方便地操作XHTML文檔,在VS2008需要安裝SP1才支持,而在VS2010中就直接支持了,jQuery類庫文件在Scripts文件夾下。
通過上面的做法,使我們的網站組成結構都相似,這樣更加便於維護(不像早期的版本,大家存放這類文件的文件夾各不相同)。


更好的Javascript及HTML代碼智能感知
在以前版本的VS中對Javascript智能感知支持是比較差的,並且也沒有對HTML代碼段的支持,但是現在在VS2010中提供了這樣的功能。
 
VS2010中對JavaScript腳本智能感知作了改進,能感知到本頁中的函數名和變量
 
VS2010中提供了HTML代碼段支持


對服務器控件的ID的增強控制
我們知道一個ASP.NET服務器控件有三個ID,即:ID,ClientID和UniqueID。
其中ID爲服務器控件的服務器標示,在服務器代碼中通過ID來唯一區分服務器控件(因此在同一個頁面中ID必須唯一);
ClientID是服務器控件在轉化成HTML元素之後在客戶端的ID,爲了防止出現命名衝突,ASP.NET 爲頁上的各個服務器控件自動生成一個唯一的 ClientID 值。ClientID 值是通過連接控件的 ID 值和它的父控件的 UniqueID 值生成的。生成的 ID 的各個部分以下劃線字符 (_) 分隔;
UniqueID是服務器控件的唯一的、以分層形式限定的標識符,它也是服務器控件轉化成HTML元素之後在客戶端的name標識。
有時候我們要在客戶端使用Javascript通過HTML元素的id來操作HTML元素,如果服務器控件在數據綁定控件中,那麼它最終對應的HTML元素的id和我們平常使用的大不一樣,這使我們操作起來很不方便,特別是我們在用javascript實現數據的全選反選時不方便,因爲在操作單個控件時我們還可以按如下方式編寫javascript代碼:

而在ASP.NET中提供了對服務器控件的對應的HTML元素的id的控制更強了,增加了ClientIDMode屬性來控制。下面是一個展示ClientIDMode屬性用法的例子,在服務端編碼如下:


如果我們進行數據綁定之後再查看生成的HTML源代碼,會看到類似的部分:

可以看到ClientIDMode="AutoID" 時控件的客戶端ID和我們在早期的ASP.NET沒有什麼區別;而ClientIDMode="Static"時控件的客戶端ID不會發生變化;在ClientIDMode="Predictable"時控件的客戶端ID中還帶有數據行標識(如:id="MainContent_gvUserList_lb1_0"中的“0”即標識在數據源中的位置爲0,即第一條記錄)。
通過指定ClientIDMode屬性可以讓我們很方便控制服務器端控件最終生成的HTML元素的ID,這一點也是相當方便的。


ViewState視圖控制
在以前的開發過程中,ViewState是一個讓人又愛又恨的東西:用得好了可以帶來很大的方便,用得不好也會帶來很大的麻煩。我們知道ViewState在客戶端是以隱藏域的形式存儲的,爲了保密起見會對ViewState進行Base64編碼後保存在客戶端隱藏域中,提交到服務器後服務器端再對網頁中的這部分隱藏數據進行Base64解碼,提取保存在隱藏域中的控件數據。因爲HTTP請求是無狀態非連接的,使用了ViewState就可以在同一個頁面的不同請求間保存數據,這麼做確實比較方便;但是如果如果控件的狀態數據很多,就會導致ViewState的體積變大,影響了響應速度。而在ASP.NET4.0以前的版本中是默認啓用的,爲了減輕ViewState帶來的不利影響,我們不得不在頁面中或者控件中設置ViewState是否啓用(儘管我們可以在web.config中設置全局禁用ViewState,但是有的時候我們可能還間接使用這個屬性,比如在管理後臺因爲我們操作較少,對性能關注不如前臺)。
現在在ASP.NET 4.0中這一切得到了改變,在ASP.NET4.0對ViewState的屬性默認是不啓用的,但是你可以針對某個控件單獨啓用(儘管你可能在控件的更高級別設置爲禁用)。
看下面的部分代碼:


後臺代碼如下:


頁面第一次運行效果如下:
 
因爲第一次運行時符合!Page.IsPostBack判斷,所以Text屬性都被設置成了“The viewstate id enabled”,當點擊頁面的按鈕時,變成如下效果:
 
出現這樣結果的原因是因爲第一個Label的文字通過ViewState保存了,而第二個Label控件被禁用了,所以頁面刷新後狀態數據沒有得到保存。


SEO優化支持
針對國外的網站,搜索引擎都會讀取網頁中的description和keywords字段,這樣搜索引擎通過這兩個meta節點來識別我們的網頁,比單純通過網頁中詞語的頻率分析來得知網頁的內容要容易得多,因此如果我們很好地利用了這兩個東東在搜索同樣的內容時可能我們的網頁顯示會比較靠前,這就是所謂的SEO(Search Engine Optimization,即搜索引擎優化)技術,在以前的ASP.NET中我們沒有辦法直接設置每個網頁的這兩個屬性,但是在ASP.NET4.0中我們可以直接在代碼中操作了。
如下面的代碼:


這樣最終網頁的HTML源代碼中我們可以看到如下部分:

這樣做搜索引擎優化就方便多了。
需要說明兩點:1、SEO涉及到的東西比較多,操作起來也比較複雜,設置description和keywords僅僅是一個方面。2、由於國人在SEO方面孜孜不倦的追求,以致到了幾乎走火入魔的地步,所以很多搜索引擎對國人網站中的這兩個字段不是太感冒了。
路由功能
做過MVC的朋友可能熟悉路由功能,特別是ASP.NET MVC的朋友。我們知道按照常規方式對於用戶名爲zhoufoxcn的博客或者商店網址可能會是如下形式:
http://www.xxx.com/user.aspx?username=zhoufoxcn
http://www.xxx.com/user.aspx?userid=4419544(假如zhoufoxcn對應的userid爲4419544)
這樣非常不便於記憶,如果我們採用URL重寫的方式可以變得更友好一點,比如:
http://www.xxx.com/user/zhoufoxcn.aspx(注取決於URL重寫規則)
如果採用路由的話,可以讓URL變得更友好一些,也更便於搜索引擎收錄,比如:
http://www.xxx.com/user/zhoufoxcn
如果要在非ASP.NET MVC項目中使用路由,可以按照下面的步驟操作:
在應用ASP.NET程序啓動時配置路由,ASP.NET應用程序啓動時會執行在global.asax.cs中的Application_Start方法中的代碼,我們可以這麼寫:


然後,在需要使用的地方這麼寫:


這樣就完成了路由功能的使用了。


總結:
除了上面提到的之外,在ASP.NET4.0中還增加了一些新的服務器控件,如QueryExtender等。利用ASP.NET4.0我們開發ASP.NET應用控制可以更靈活了,這樣在滿足不同場合的需要時也更方便了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章