2012/1/19 17:58 |
閱讀數 : 1209
我要推薦
|
| 文章分類 :
ASP.NET MVC - Views
訂閱
在寫 ASP.NET MVC 應用程式時,在 View 中有幾樣東西特別有趣,在此做一個比較。
1. ViewData vs. TempData
ViewData 和 TempData 是在 MVC 中暫存資料的一種物件,和 Web Form 的 ViewState 很像,最常被用到的是 ViewData,而有些教學中會特別說明 ViewData 和 TempData 功能相同,只是微軟有這麼閒,在 MVC 中提供兩種相同功能的物件?所以我們特別翻了一下 ASP.NET MVC 的 source code (System.Web.Mvc.dll),找到 ViewData 和 TempData 的來源,分別是 ViewDataDictionary 與 TempDataDictionary,不過 ViewDataDictionary 就只是單純的鍵值對物件,但 TempDataDictionary 會由一個 ITempDataProvider 介面的物件載入,而去追蹤 MVC 中有實作 ITempDataProvider 的物件,追到了一個 SessionStateTempDataProvider,內部的實作是用 Session 去保存 TempData 內的資料。
所以,ViewData 是單向丟給 View 的資料,而 TempData 則是可雙向交換的資料,將 TempData 視為 Session,就可以更明白它的用處了。
2. Url, Html 和 Ajax
在 MVC 的 View 中,有三種不同的輸出資料工具,分別是 UrlHelper, HtmlHelper 與 AjaxHelper,在 Razor 語法中分別為 @Url, @Html 與 @Ajax,雖然它們都是 Helper,但用途卻大不相同:
-
UrlHelper 輸出的是 URL,但不包含 <a> 或驅動它的元素,它就只是輸出字串而已。
-
HtmlHelper 輸出的是 HTML 指令。
-
AjaxHelper 輸出的是可用於 AJAX 作業的指令,但實際的實作會放在指令碼內。
UrlHelper 的實際輸出是來自 UrlHelper.GenerateUrl;HtmlHelper 的輸出是來自不同的實作,像是 InputHelper(), SelectInternal() 等等;AjaxHelper 的輸出是來自 System.Web.Mvc.Ajax.AjaxExtensions 中的方法。
其他如果發現有一不同的地方,再回頭來充實本文。
DotBlogs Tags:
ASP.NET MVC
關連文章
[Visual Studio "11" Series] ASP.NET 4.5 新功能 (3) - ASP.NET MVC 4.0
[ASP.NET][MVC] ASP.NET MVC (12) : 設計自己的 View 輸出-以 CSV 為例
[ASP.NET][MVC] ASP.NET MVC (10) : 部份檢視與 AJAX 的整合
[ASP.NET][MVC] ASP.NET MVC (9) : 部份檢視 (Partial View)
[ASP.NET][MVC] ASP.NET MVC (8) : 部署 MVC 3 應用程式到 IIS 7.5
[ASP.NET][MVC] ASP.NET MVC (7) : View不是只有網頁而已
[ASP.NET][MVC] ASP.NET MVC (6) : 資料驗證 (2) Model Validation
[ASP.NET][MVC] ASP.NET MVC (5) : 資料驗證 (1) Server-side Validation
[ASP.NET][MVC] ASP.NET MVC (4) : 繪製表單與 HTTP POST
[ASP.NET][MVC] ASP.NET MVC (3) : 加入資料檢視功能-Models