概述
在模型-視圖-控制器 (MVC) 模式中,視圖專門用於封裝呈現邏輯。 這些視圖不應包含任何應用程式邏輯或資料庫檢索代碼。 所有應用程式邏輯都應該由控制器進行處理。 視圖使用從控制器傳遞給它的資料來呈現相應的 UI。 此資料是使用 View 方法從控制器操作方法中傳遞給視圖的。
在 MVC Web 應用程式的普通工作流程中,控制器操作方法將處理傳入的 Web 請求。
這些操作方法使用傳入的參數值執行應用程式代碼以及檢索或更新資料庫中的資料模型對象。 然後,這些方法會選擇一個將響應呈現到瀏覽器的視圖。
MVC 3.0視圖引擎
MVC 3.0為我們提供了兩種視圖引擎ASPX(C#)和Razor(CSHTML)
ASPX(C#)引擎
ASP.NET MVC 架構支援使用視圖引擎產生視圖 (UI)。 預設情況下,MVC 架構使用從現有 ASP.NET 頁面 (.aspx)、主版頁面 (.master) 和使用者控制項 (.ascx) 類型中繼承的自訂類型(ViewPage、ViewMasterPage 和 ViewUserControl)作為視圖。
Razor(CSHTML)引擎
_appstart.cshtml :
應用程式啟動時在Global. Application_Start方法後執行。
用於進行App的初始化時,需要進行處理的內容.例:向資料庫記錄系統初始化的一些資訊。
功能與Global.Application_Start類似,差別在於:Global的Start先執行,然後在到該_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynamic新特性~~在聲明中,作為屬性、欄位、索引器、參數、傳回值或類型約束的類型。
_Layout.cshtml:
布局頁面即和aspx的主版頁面相似。
建立MVC視圖(Razor引擎)
建立一個基於Razor引擎空的MVC 3.0空應用程式
選擇空項目模板和Razor視圖引擎
建立一個Controller命名為HomeController
滑鼠右擊 Controller檔案夾
輸入Controller名稱。注意必須以Controller結尾。
添加完控制器後預設給出了起Index的方法。。。
此時我們沒有建立對該Action對應的View,所以View是紅色的。。。運行時介面會報錯。。
public ActionResult Index()
{
return View();
}
我們先讓他輸出一個字串到頁面。。。
將代碼
public ActionResult Index()
{
return View();
}
修改為
public string Index()
{
return "Hello World";
}
運行之後 一個簡單的介面就出現了 。。。
添加View
此時我們只是單純的顯示了一些字串而已。但是我們的介面還需要很多元素不僅僅是文字。。
所以我們還是得從View視圖下手。。
返回到前面的
public ActionResult Index()
{
return View();
}
修改前面的代碼讓Controller的Index返回一個ActionResult
對於ActionResult請參見:我要學ASP.NET MVC 3.0(五): 入手Controller/Action
右擊該Action彈出表單 ---選擇添加視圖
建議不要修改視圖名稱,後續會慢慢解釋
此時在View檔案夾中會對應Controller產生一個Action對應的View視圖
在視圖裡面編寫html代碼
@{
ViewBag.Title = "首頁";
}
<h2><a href="Index">Hello World</a></h2>
運行效果
控制器和視圖之間傳遞的資料 很多時候我們要把一些資料傳遞到介面上來。就像Web的Session代碼如下
public ActionResult Index()
{
ViewData["Message"] = "Hello World";
return View();
}
View修改為
@{
ViewBag.Title = "首頁";
}
<h2><a href="Index">@ViewData["Message"]</a></h2>
運行效果還是一樣的。。。
關於TempData 、ViewBag和ViewData
其實我個人覺得他們都是一樣的。
如果你使用的TempData 、ViewData用ViewBag的方式調用也是一樣的效果
反之亦然。。。
例如:ViewBag.Message和ViewData["Message"]
public ActionResult Index()
{
ViewBag.Message = "Hello World";
// ViewData["Message"] = "Hello World";
return View();
}
View代碼不變運行效果一樣。。。反覆調試效果都是一樣的。。
TempData、ViewData和ViewBag異同:
TempData ViewData ViewBag都可以用來儲存資料。 它們之間的區別如下: TempData:儲存在Session中,Controller每次執行請求的時候,會從Session中先擷取TempData,而後清除Session,擷取完TempData資料,雖然儲存在內部字典對象中,但是其集合中的每個條目訪問一次後就從字典表中刪除。具體代碼層面,TempData擷取過程是通過SessionStateTempDataProvider.LoadTempData方法從ControllerContext的Session中讀取資料,而後清除Session,故TempData只能跨Controller傳遞一次。ViewData:生命週期和View相同,僅對當前View有效。ViewBag:和ViewData生命週期相同,也是對但前View有效,不同的是ViewBag的類型不再是字典的索引值對結構,而是dynamic動態類型,屬於MVC3裡面新增的部分。
總結 剛開始接觸也談不上總結。以後學的差不多了再補回來。。(*^__^*) 嘻嘻
下節預告 新來的Razor
作者:記憶逝去的青春
出處:http://www.cnblogs.com/lukun/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,如有問題,可以通過http://www.cnblogs.com/lukun/ 聯絡我,非常感謝。
TempData ViewData ViewBag都可以用來儲存資料。