我要學ASP.NET MVC 3.0(六): MVC 3.0建立你的View視圖

來源:互聯網
上載者:User

概述

 

在模型-視圖-控制器 (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都可以用來儲存資料。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.