Visual Studio 2010 Beta 1和.NET Framework Beta 1已經發布有一段時間了,我也早就該寫這篇文章了。ASP.NET 4.0改進了許多不同的情境集(set of scenarios),如Webforms ,Dynamic Data以及基於AJAX的Web開發。此外還有許多對支撐ASP.NET的核心運行時環境的改進,比如Caching, Session,還有Request/Response對象。
在這篇文章裡,我們將一起檢驗一下對web form的一些改進。這樣的改進很多,我們還將在隨後的文章裡體驗更多這種改進。
使用ViewStateMode屬性控制View State - 效能的增強
在ASP.NET Webform裡最為人所詬病的毛病之一就是不斷增多的viewstate影響到效能。儘管之前就可以把EnableViewState屬性設為true或false ,之後,所以有的controls都預設繼承,並且即使你在control層把它設為啟用,也還是會產生不一致的行為。
在ASP.NET 4.0中 , ViewStateMode屬性有助於確定每個control的Viewstate是否應啟用,禁用或被繼承。例如:
<ASP:Panel ID="pnlViewState" runat="server" ViewStateMode="Disabled">
Disabled: <asp:Label ID="label1" runat="server" Text="Value set in markup"ViewStateMode="Inherit" /><br />
Enabled: <asp:Label ID="label2" runat="server" Text="Value set in markup"ViewStateMode="Enabled" />
<hr />
<asp:button ID="Button1" runat="server" Text="Postback" />
</asp:Panel>
後端代碼
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
label1.Text = "Value set in code behind";
label2.Text = "Value set in code behind";
}
}
運行這個頁面,你會發現兩個標籤的初值都被設為了"Value set in code behind",而點擊按鈕(postback)後,label1的值變成了“Value set in markup” ,label2的值則保持不變。正如你所看到的那樣,儲存這兩個標籤的面板把ViewStateMode設定為禁用,label1繼承了這一設定(如果沒有指定的話這是預設值),label2則設為了啟用。這就是為什麼label2保持了viewstate而label1丟失了。
雖然可以說之前就可以使用簡便的EnableViewState屬性,但一直就不穩定。想想我們在大多數效能討論會(performance session)上,都會說如果viewstate不能正常運作就先禁用它然後再在control層設為啟動,這個ViewStateMode的引入可以說是有助提升效能的一個很好的結構性變動(architectural change)。
網頁的Meta Keyword和Description - 搜尋引擎最佳化功能
在Visual Studio 2008中,可以通過直接聲明或在程式中使用Page.Title設定網頁的標題。隨著越來越多的流量通過搜尋引擎,網頁的標題,關鍵字和描述變得更為重要了。雖然由於關鍵字被人濫用導致許多搜尋引擎已經對此忽略不計,但是,頁面的描述還是Google,Bing這些主流搜尋引擎賴以鑒別和索引網頁內容的依據。
ASP.NET中的新功能4.0允許使用者像下面這樣通過編程的方式設定頁面描述和關鍵詞: -
protected void Page_Load(object sender, EventArgs e)
{
this.Page.Title = "My ASP.NET Blog";
this.Page.MetaKeywords = "ASP.NET, Web Development, Blog, ASP.NET Blog";
this.Page.MetaDescription = "This Blog contains posts related to ASP.NET and Web Development";
}
以上代碼會產生如下標記:
<meta name="keywords" content="ASP.NET, Web Development, Blog, ASP.NET Blog" />
<meta name="description" content="This Blog contains posts related to ASP.NET and Web Development" />
它的運作機制是,如果meta標籤已經出現在HTML標籤裡,那麼只要name屬性相同,程式中設定的內容就都會被填寫到content裡。
雖然這看起來很簡單,但是在要根據某些條件或標準來動態設定它們的情況下,這就很有用了。目前,這些內容都是在HTML代碼裡靜態地設定的。現在,有了Page類這一級的訪問,它們就可以動態地設定了。
對Webforms還有許多其它的改進,比如Routing的增強,ClientID的設定等,我們將在後面的文章裡一一詳解。
讓我們歡呼吧!