ASP.NET - MVC框架及搭建教程
一、MVC簡(jiǎn)介
MVC:Model-View-Controller(模型-視圖-控制器),MVC是一種軟件開發(fā)架構(gòu)模式。
1、模型(Model)
模型對(duì)象是實(shí)現(xiàn)應(yīng)用程序數(shù)據(jù)域邏輯的應(yīng)用程序部件。?通常,模型對(duì)象會(huì)檢索模型狀態(tài)并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。?例如,Product?對(duì)象可能會(huì)從數(shù)據(jù)庫(kù)中檢索信息,操作該信息,然后將更新的信息寫回到數(shù)據(jù)庫(kù)內(nèi)的?Product?表中。
2、視圖(View)
視圖是顯示應(yīng)用程序用戶界面?(UI)?的組件。通常,此?UI?是用模型數(shù)據(jù)創(chuàng)建的。Product表的編輯視圖便是一個(gè)視圖示例,該視圖基于?Product?對(duì)象的當(dāng)前狀態(tài)顯示文本框、下拉列表和復(fù)選框。
3、控制器(Controller)
控制器是處理用戶交互、使用模型并最終選擇要呈現(xiàn)的視圖來(lái)顯示?UI?的組件。?在MVC?應(yīng)用程序中,視圖僅顯示信息;控制器則用于處理和響應(yīng)用戶輸入和交互。?例如,控制器處理查詢字符串值,并將這些值傳遞給模型,而模型可能會(huì)使用這些值來(lái)查詢數(shù)據(jù)庫(kù)。
4.附上關(guān)系圖:
二、為什么會(huì)有 MVC,有什么優(yōu)點(diǎn),缺點(diǎn)
1、為什么會(huì)有 MVC
Asp.net Web Form?存在的問(wèn)題:
1. 響應(yīng)時(shí)間:服務(wù)請(qǐng)求的耗時(shí)
2. 帶寬消耗:同時(shí)可傳輸多少數(shù)據(jù):
ASP.NET 開發(fā)人員都非常熟悉 ViewStates,因?yàn)樗軌蜃詣?dòng)保存 post 返回的狀態(tài),減少開發(fā)時(shí)間。但是這種開發(fā)時(shí)間的減少會(huì)帶來(lái)巨大的消耗,Viewstate 增加了頁(yè)面的大小。在做的加載測(cè)試中,與 MVC 對(duì)比,我們發(fā)現(xiàn) Viewstate 增加了兩倍的頁(yè)面存儲(chǔ)。
3. 單元測(cè)試:無(wú)法執(zhí)行自動(dòng)化測(cè)試,必須手動(dòng)測(cè)試:
Asp.net webform 頁(yè)面都繼承了“System.Web.UI.Page”類。但是這些類并不像普通的類一樣能夠到處復(fù)用和實(shí)例化。換句話來(lái)講,在 Weform 類中永遠(yuǎn)都不可能執(zhí)行以下代碼中的操作:
WebForm1 obj = new WebForm1();
obj.Button1_Click();
既然無(wú)法實(shí)例化后臺(tái)代碼類,單元測(cè)試也是非常困難的,也無(wú)法執(zhí)行自動(dòng)化測(cè)試。必須手動(dòng)測(cè)試。
2、MVC 框架的優(yōu)點(diǎn)
? 通過(guò)將應(yīng)用程序分為模型、視圖和控制器,化繁為簡(jiǎn)的工作更加輕松。
? 它不使用視圖狀態(tài)或基于服務(wù)器的窗體。 這使得 MVC 框架特別適合想要完全控制應(yīng)用程序行為的開發(fā)人員。
? 它使用一種通過(guò)單一控制器處理 Web 應(yīng)用程序請(qǐng)求的前端控制器模式。 這使您可以設(shè)計(jì)一個(gè)支持豐富路由基礎(chǔ)結(jié)構(gòu)的應(yīng)用程序。
? 它為測(cè)試驅(qū)動(dòng)的開發(fā) (TDD) 提供了更好的支持。
? 它非常適合大型開發(fā)團(tuán)隊(duì)支持的 Web 應(yīng)用程序,以及需要對(duì)應(yīng)用程序行為進(jìn)行嚴(yán)格控制的 Web 設(shè)計(jì)人員。
3、MVC 框架的缺點(diǎn)
? 視圖(View)與控制器(Controller)之間連接過(guò)于緊密:視圖與控制器是相互分離,卻是聯(lián)系緊密的部件,不能獨(dú)立重用。
? 視圖(View)對(duì)模型(Model)數(shù)據(jù)訪問(wèn)低效:依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。
三、三層框架搭建
1、概述
a.?數(shù)據(jù)訪問(wèn)層(EntityFramework):主要負(fù)責(zé)對(duì)數(shù)據(jù)的訪問(wèn)管理,而不必管其他操作,為業(yè)務(wù)邏輯層提供方法調(diào)用。
b.?業(yè)務(wù)邏輯層:主要負(fù)責(zé)業(yè)務(wù)邏輯的處理,對(duì)數(shù)據(jù)層的操作。也就是說(shuō)把一些數(shù)據(jù)層的操作進(jìn)行組合。
c.?表示層:主要對(duì)用戶的請(qǐng)求接受,以及數(shù)據(jù)的返回,為客戶端提供應(yīng)用程序的訪問(wèn)。
d.?三層框架引用關(guān)系圖:
2、搭建 MVC三層框架項(xiàng)目
一、創(chuàng)建 ASP.NET MVC項(xiàng)目
a. 打開 Visual Studio
b. 操作:文件 -> 新建 -> 項(xiàng)目 -> 確定
c. 在彈出的窗體上選擇: MVC -> 確定 即可
二、添加三層項(xiàng)目
1.BLL(業(yè)務(wù)層)、2.DAL(數(shù)據(jù)層)、3.Model(實(shí)體層)
在解決方案上操作右鍵,選擇【添加項(xiàng)目】
三、添加三層引用關(guān)系
1. 三層間的引用關(guān)系如下:
? DAL 引用 Model
? BLL 引用 DAL 和 Model
? 創(chuàng)建的 ASP.NET MVC 項(xiàng)目引用 BLL 和 Model
2. 引用方法:在對(duì)應(yīng)的項(xiàng)目上操作右鍵,選擇【引用】(也可直接在項(xiàng)目中的“引用”上操作右鍵)
四、了解目錄結(jié)構(gòu)及作用
/******************創(chuàng)建第一個(gè)MVC項(xiàng)目**********************/
- 初始化開發(fā)環(huán)境
- 創(chuàng)建第一個(gè)ASP.NETMVC應(yīng)用程序
- 控制器、活動(dòng)和視圖
- 簡(jiǎn)單數(shù)據(jù)訪問(wèn)
本章我們將引入貫穿本書第1部分的示例程序——GuestBook。通過(guò)GuestBook,用戶向網(wǎng)站中發(fā)布他們的名字以及消息,同時(shí)可以瀏覽其他用戶發(fā)布的消息。雖然GuestBook比較簡(jiǎn)單,但我們將用它學(xué)習(xí)ASP.NET MVC的核心概念。
本書的第1部分,我們將構(gòu)建這個(gè)示例。我們將從檢查進(jìn)行ASP.NETMVC開發(fā)所必須的開發(fā)工具開始,接下來(lái)創(chuàng)建GuestBook網(wǎng)站的初始架構(gòu),并研究新建一個(gè)MVC程序時(shí),默認(rèn)產(chǎn)生的組件。最后將學(xué)習(xí)如何使用Entity Framework 4.1的新特性訪問(wèn)SQL SERVER COMPACT數(shù)據(jù)庫(kù)。
第3章將在本章內(nèi)容的基礎(chǔ)上引入視圖的概念,同時(shí)介紹如何使用Razor視圖引擎和HTML輔助方法構(gòu)建用戶界面元素。第4章將會(huì)深入學(xué)習(xí)控制器,同時(shí)介紹如何對(duì)MVC程序進(jìn)行單元測(cè)試。
現(xiàn)在,我們就開始學(xué)習(xí)如何搭建開發(fā)環(huán)境。
2.1 初始化開發(fā)環(huán)境
在你開始創(chuàng)建GuestBook程序之前,首先要保證你的開發(fā)環(huán)境已經(jīng)正確配置。首先你需要安裝Visual Studio 2010。你可以通過(guò)以下幾種方式獲取Visual Studio。
-
安裝試用版,下載地址:h?ttp://www.microsoft.com/visualstudio/en-us/try?(本書翻譯時(shí),可以安裝 VisualStudio 2012試用版了)。
-
使用免費(fèi)的Visual Web Developer 2010 Express,馬上我們將學(xué)習(xí)如何安裝它。
在VS2010中,默認(rèn)提供了ASP.NET MVC2.0,所以你必須安裝獨(dú)立的安裝包才能在VS2010中開發(fā)MVC3和4應(yīng)用程序。最簡(jiǎn)單的方式就是通過(guò)微軟的Web PlatForm Installer安裝。
2.1.1 通過(guò)Web PlatForm Installer安裝MVC
Web PlatForm Installer可以幫助你非常輕松的通過(guò)微軟網(wǎng)站安裝不同的組件到你的機(jī)器上,其中包括:IIS Express,SQL SERVER EXPRESS,SQL SERVER COMPACT,MVC以及Visual Web Developer Express。
Web PlatForm Installer允許你獨(dú)立安裝各個(gè)工具,同時(shí)你也可以通過(guò)Visual Studio sp1 Pack for Visual Studio and Visual Web Developer安裝包一次安裝上述所有工具。你可以在HTTP://www.ASP.NET/MVC中單擊綠色的按鈕下載安裝。如圖2.1。
?????????????????????????????
圖2.1 單擊安裝按鈕將開始下載Web PlatForm Installer,并開始安裝必須的組件?
單擊此按鈕,將下載一個(gè)Web PlatForm Installer引導(dǎo)程序,并開始安裝ASP.NET MVC以及其他組件,包括IIS EXPRESS,SQL SERVER COMPACT 4,SQL SERVER EXPRESS和Web Deploy Tool.如果你已經(jīng)安裝Visual Studio 2010,將會(huì)安裝Visual Studio Sp1,反之,將會(huì)下載Visual Web Developer 2010 Express 并安裝。(MVC在兩個(gè)開發(fā)環(huán)境中沒(méi)有任何差別)。在翻譯本書時(shí),微軟已發(fā)布Visual Studio 2012,安裝過(guò)程與前述一致。
如果你想自定義安裝需要的包,你可以單擊安裝頁(yè)面左下角的“Items to Be Installed”按鈕。
如果你不想使用Web PlatForm Installer安裝,你可以收到安裝ASP.NET MVC以及必須的組件。獨(dú)立安裝包可以在HTTP://www.ASP.NET/MVC處下載。
Web PlatFormInstaller——不僅局限于微軟技術(shù)
除了可以獲取最新版本的微軟的網(wǎng)絡(luò)工具,還可以利用Web Platform Installer快速安裝許多其他的Web應(yīng)用程序。包括:基于.NET的應(yīng)用程序(開源的Umbraco CMS,DotNetNuke),使用PHP開發(fā)的程序(WordPress,一個(gè)流行的博客平臺(tái))。
至此,你應(yīng)該安裝了開發(fā)ASP.NET MVC程序所必須的軟件環(huán)境。接下來(lái)我們將創(chuàng)建你的第一個(gè)應(yīng)用程序。
2.2 創(chuàng)建第一個(gè)MVC應(yīng)用程序
我們將使用默認(rèn)模板創(chuàng)建一個(gè)新的應(yīng)用程序,然后讓其顯示一些動(dòng)態(tài)內(nèi)容。最后我們將查看組成一個(gè)標(biāo)準(zhǔn)MVC項(xiàng)目的不同組件。
2.2.1???????創(chuàng)建新項(xiàng)目
打開Visual Studio 2010(或visual Web Developer Express),選擇“文件”—“新建項(xiàng)目”,如圖2.2。
選擇左邊的“Visual C#”—“Web”,在右邊將出現(xiàn)很多用于Web 應(yīng)用程序開發(fā)的模板,本例中,需要選中ASP.NET MVC 4 WEB 應(yīng)用程序。如果沒(méi)有看到此模板,檢查在對(duì)話框的頂端,模板框架是否選中.NET Framework 4(下圖是4.5)。
將項(xiàng)目名稱改為:GuestBook,并保存到恰當(dāng)?shù)奈恢谩?#xff08;默認(rèn)是C:\users\<your username>\Documents\VisualStudio 2010\Projects)。
圖2.2? 新建項(xiàng)目對(duì)話框,此處選擇ASP.NET MVC 4 Web應(yīng)用程序
單擊“確定”按鈕,Visual Studio將打開另外一個(gè)對(duì)話框,如圖2.3。
你可以選擇開發(fā)所需的模板。“空”模板默認(rèn)創(chuàng)建空的項(xiàng)目架構(gòu),“Internet應(yīng)用程序”創(chuàng)建了一些基礎(chǔ)的布局和驗(yàn)證。“Intranet應(yīng)用程序”有點(diǎn)類似“Internet應(yīng)用程序”,但是使用Windows驗(yàn)證,而不是Internet應(yīng)用程序使用的Forms驗(yàn)證。簡(jiǎn)單起見,選擇“Internet應(yīng)用程序”模板。
接下來(lái),你可以選擇視圖引擎。本例中,使用默認(rèn)視圖引擎,即Razor視圖引擎(在MVC3發(fā)布時(shí)引入)。當(dāng)然,你也可以選擇傳統(tǒng)的Web Form視圖引擎(在MVC1和2中只能使用此引擎)。我們將會(huì)在第3章和17章,更深入學(xué)習(xí)視圖引擎。
最后,你可以決定是否要?jiǎng)?chuàng)建一個(gè)單元測(cè)試項(xiàng)目。對(duì)大多數(shù)程序而言,為了保證程序的正確性,建議創(chuàng)建單元測(cè)試項(xiàng)目,并進(jìn)行單元測(cè)試。雖然我們直到第4章才開始學(xué)習(xí)單元測(cè)試的內(nèi)容,但此處先把單元測(cè)試項(xiàng)目一起創(chuàng)建出來(lái)。單擊“確定”創(chuàng)建項(xiàng)目。
圖2.3 新建項(xiàng)目對(duì)話框,你可以選擇項(xiàng)目模板和是否創(chuàng)建對(duì)應(yīng)的測(cè)試項(xiàng)目
創(chuàng)建項(xiàng)目成功后,就可以運(yùn)行項(xiàng)目。你可以通過(guò)ctrl+f5快捷鍵或者單擊Visual Studio 工具欄中的debug,運(yùn)行項(xiàng)目。這將會(huì)啟動(dòng)ASP.NET Development Server,并在默認(rèn)的瀏覽器中打開應(yīng)用程序。如圖2.4。
圖2.4? 新建的項(xiàng)目包含一些默認(rèn)頁(yè)面,可以幫助我們快速開始
在我們繼續(xù)深入之前,先瀏覽一下默認(rèn)項(xiàng)目模板中的各個(gè)組成部分。
2.2.2???????默認(rèn)項(xiàng)目模板一覽
當(dāng)你打開新建的項(xiàng)目,在解決方案資源管理器中,會(huì)發(fā)現(xiàn)在默認(rèn)項(xiàng)目中包含幾個(gè)文件夾和相應(yīng)的文件。如圖2.5。
圖2.5? 使用默認(rèn)項(xiàng)目模板創(chuàng)建的項(xiàng)目包含的控制器、模型、視圖和腳本文件。
默認(rèn)項(xiàng)目模板中的每個(gè)文件和文件夾都擔(dān)當(dāng)不同的角色。接下來(lái)將順次學(xué)習(xí):
App_Data文件夾
可以使用App_Data文件夾存放數(shù)據(jù)庫(kù)、XML文件或任何其他應(yīng)用程序所使用的數(shù)據(jù)。ASP.NET運(yùn)行時(shí)默認(rèn)支持該文件夾并阻止用戶直接訪問(wèn)該文件中的文件。只有應(yīng)用程序可以讀寫此文件夾中的內(nèi)容。
Content文件夾
該文件存放了項(xiàng)目部署時(shí)需要的非代碼資源文件。典型資源文件包括圖片和CSS文件。默認(rèn)情況下,該文件夾包含一個(gè)網(wǎng)站使用的默認(rèn)的css文件(Site.css),還包含一個(gè)名為themes子文件夾,其中放置了jQuery UI(用于用戶界面的客戶端框架,我們將在第7章學(xué)習(xí)它)需要的一些圖片和css。
Controller文件夾
回顧一下第1章,控制器充當(dāng)橋梁作用,它接收請(qǐng)求,處理輸入并選擇一個(gè)恰當(dāng)?shù)幕顒?dòng)執(zhí)行(比如:顯示一個(gè)視圖)。在ASP.NET MVC中,控制器以類的形式出現(xiàn)在Controller文件夾中。在本例中,該文件夾包含兩個(gè)控制器——HomeController(用于處理對(duì)Home頁(yè)面的請(qǐng)求),另一個(gè)是AccountController(用于處理驗(yàn)證),我們將會(huì)在2.2.3節(jié)再次學(xué)習(xí)控制器。
Model文件夾
該文件中包含了表示應(yīng)用程序業(yè)務(wù)邏輯核心概念的一些類,或者是為特定視圖封裝數(shù)據(jù)的一些類(即視圖模型)。隨著應(yīng)用程序處理功能的增加,你可能更愿意用一個(gè)類庫(kù)項(xiàng)目來(lái)存放這些類,但對(duì)于一些小型項(xiàng)目而言,將這些類放在本文件夾是個(gè)不錯(cuò)的選擇。在本例中,只有一個(gè)模型類文件——AccountModels.cs,該文件定義了默認(rèn)項(xiàng)目模板中與驗(yàn)證相關(guān)的幾個(gè)類。
Scripts文件夾
你可以把項(xiàng)目中用到的javascript文件放在此文件中,本例中,該文件夾包含很多js文件,包括開源的jQuery庫(kù)(我們將在第7章深入學(xué)習(xí)jQuery)和用于客戶端驗(yàn)證的一些腳本。
Views文件夾
本文件夾包括呈現(xiàn)用戶界面用到的模板,每一個(gè)模板都表示為一個(gè)Razor視圖(以.csHTML為后綴的文件),這些文件放置在特殊命名的子文件中,這些子文件夾的名稱與控制這些視圖模板顯示的控制器的名稱相同。如果聽起來(lái)有些拗口,不用擔(dān)心,我們將會(huì)在2.2.3節(jié)深入研究控制器、活動(dòng)和視圖之間的關(guān)系。
Global.asax
Global.asax文件位于網(wǎng)站根目錄下,包含了應(yīng)用程序啟動(dòng)時(shí),首先要執(zhí)行的一些初始化代碼,例如路由注冊(cè)代碼(下一節(jié)將學(xué)習(xí)什么是路由)。
Web.config
Web.config文件位于網(wǎng)站根目錄下,包含了ASP.NET MVC程序正確運(yùn)行所必須的配置細(xì)節(jié)信息。
至此,我們已經(jīng)快速的瀏覽了默認(rèn)項(xiàng)目模板生成的一些文件夾和文件。接下來(lái),將會(huì)更深入的學(xué)習(xí)作為核心概念的控制器、活動(dòng)和視圖之間的交互。在創(chuàng)建我們自己的控制器之前,將使用系統(tǒng)默認(rèn)創(chuàng)建的HomeController來(lái)演示這個(gè)交互過(guò)程。
2.2.3???????控制器、活動(dòng)和動(dòng)態(tài)顯示
通過(guò)第1章的學(xué)習(xí),我們知道控制器充當(dāng)協(xié)調(diào)員的角色。它可以接受各種輸入,比如通過(guò)表單數(shù)據(jù)或者通過(guò)URL,并將委托給特定的視圖呈現(xiàn)頁(yè)面。
控制器和活動(dòng)方法
在ASP.NETMVC中,使用類表示控制器,這些控制器類都繼承自Controller。這些類中的每個(gè)方法(即所謂的活動(dòng))都與特定的URL想對(duì)應(yīng)。我們將使用Controller文件夾下的HomeController演示這種映射關(guān)系。HomeController類的代碼如下:
代碼2.1 默認(rèn)的HomeController
using System.Web.MVC;
namespace Guestbook.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start";
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your quintessential. . . ";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your quintessential contact. . . ";
return View();
}
}
}
?HomeController是非常簡(jiǎn)單的控制器類?,如果一個(gè)類繼承自Controller而且類名以Controller為后綴,則說(shuō)明該類是控制器類。
該類還有其他的兩個(gè)活動(dòng)方法。活動(dòng)是控制器類中的公共(public)方法,用來(lái)處理特定的URL請(qǐng)求。在此處,活動(dòng)被命名為Index和About。由于這些活動(dòng)在HomeController類中,所以可以通過(guò)以下URL:/Home/Index和/Home/About分別訪問(wèn)。如果你的網(wǎng)站的域名為MySite.com,那么訪問(wèn)Home活動(dòng)的完整的URL就是HTTP://MySite.com/Home/Index。如果用戶在瀏覽器的地址欄中輸入以上URL,ASP.NET MVC框架就會(huì)初始化一個(gè)HomeController類的實(shí)例,而且會(huì)調(diào)用其中的Index活動(dòng)方法。
路由機(jī)制——映射URL到活動(dòng)
你可能會(huì)問(wèn),框架是如何知道將特定的url映射到對(duì)應(yīng)的控制器活動(dòng)的呢?你可以通過(guò)查看Global.asax文件的RegisterRoutes方法找到答案,該方法定義了路由規(guī)則,指定了如何將URL映射到一個(gè)控制器或活動(dòng)。下面是該方法的定義。
代碼2.2 路由定義
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHTTPRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
}
?DefaultApi代碼段是專門針對(duì)Web API的?,我們將在第24章深入學(xué)習(xí)。在代碼中我們看到定義了兩個(gè)入口,第1個(gè)是IgnoreRoute,主要用于通知框架匹配一些特殊的路徑,此處告知框架不應(yīng)處理任何以.axd為后綴的文件,比如Trace.axd。第2個(gè)是MapRoute,定義了URL的處理方式。默認(rèn)的路由暫時(shí)可以滿足我們的需要,但以后你可以添加更多的路由規(guī)則以映射應(yīng)用程序特定格式的url。
每個(gè)路由都有一個(gè)名稱①,一個(gè)url定義模式②和可選擇的默認(rèn)值③。當(dāng)我們請(qǐng)求“/”時(shí),它不匹配任何URL片段,所以將使用默認(rèn)值:
- Controller——“Home”
- Action—“Index”
- id——可選,可以在url中省略掉id。
由于有默認(rèn)值的存在,你可以省略部分url片段,但實(shí)現(xiàn)相同的效果。再一次假設(shè)你的網(wǎng)站域名是MySite.com,以下url:HTTP://MySite.com/Home/Index,HTTP://MySite.com/Home和HTTP://MySite.com都將會(huì)觸發(fā)HomeController的Index活動(dòng)方法。
注意:
路由模板{controller}/{action}/{id}是一個(gè)通用的路由,可以用來(lái)響應(yīng)不同的Web請(qǐng)求。用花括號(hào){}表示的標(biāo)記和單詞將匹配MVC框架能夠理解的值。
我們感興趣的最通用的值是controller和action。Controller路由值由框架傳遞給controller factory,用于實(shí)例化控制器。這也將是本章剩余的內(nèi)容要使用的路由,所以我們將使用如下格式的url, HTTP://域名/controllername/actionname。我們將在第9章更深入學(xué)習(xí)路由。
在代碼2.1中,Index活動(dòng)方法包含兩行代碼:
ViewBag.Message ="Modify this template to jump-start your ASP.NET MVC application.";
return View();
第1行代碼向ViewBag隨意指定了一些文本。第2行通知框架應(yīng)該呈現(xiàn)一個(gè)視圖。
ViewBag本質(zhì)上是一個(gè)字典(Dictionary)數(shù)據(jù)結(jié)構(gòu),它用來(lái)存儲(chǔ)數(shù)據(jù),這些數(shù)據(jù)以后可以在視圖中訪問(wèn)。它使用了.NET4中的動(dòng)態(tài)語(yǔ)言特性,可以在其中快速的定義屬性。例如你只需要一行代碼就可以為ViewBag添加另一個(gè)屬性:
public ActionResult Index()
{
ViewBag.Message ="Modify this template to jump-start your ASP.NET MVC
application.";
ViewBag.CurrentDate =DateTime.Now;
return View();
}
這里我們?yōu)閂iewBag創(chuàng)建了一個(gè)屬性CurrentDate,用來(lái)存儲(chǔ)當(dāng)前的日期和時(shí)間。我們不用修改類的定義就可以快速創(chuàng)建該屬性。現(xiàn)在我們就可以在視圖中訪問(wèn)該屬性了,當(dāng)我們調(diào)用return view()語(yǔ)句時(shí),視圖將呈現(xiàn)。
View()方法(返回值是一個(gè)ViewResult的實(shí)例)通知框架應(yīng)該呈現(xiàn)一個(gè)視圖。此處,我們并沒(méi)有指定要呈現(xiàn)的視圖的名稱,因此框架將嘗試尋找項(xiàng)目Views文件夾下面的與控制器同名(此處為Home)的子文件夾,并調(diào)用與活動(dòng)名稱(即Index)相同的視圖,然后呈現(xiàn)。
視圖
在圖2.4中,你會(huì)發(fā)現(xiàn)在Views/Home子文件夾中,確實(shí)存在一個(gè)名為Index.csHTML的文件。打開后,你會(huì)看到如下標(biāo)記語(yǔ)言:
@{
ViewBag.Title ="Home Page";
}
@section featured {
<sectionclass="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<p>The current date is@ViewBag.CurrentDate.ToLongDateString()</p>
<p>
To learn more about ASP.NET MVC visit <ahref="HTTP://ASP.NET/
MVC" title="ASP.NET MVC Website">HTTP://ASP.NET/MVC</a>.
?? ...
</p>
</div>
</section>
}
…
Index視圖中混合了C#代碼和HTML標(biāo)記語(yǔ)言,文件的頂端包含的代碼塊用來(lái)設(shè)定頁(yè)面的標(biāo)題,同時(shí)在<h2>元素中顯示消息,通過(guò)調(diào)用@ViewBag.Message將在控制器中設(shè)定的ViewBag的Message屬性的內(nèi)容輸出。
你還可以修改視圖以顯示我們添加到ViewBag中的CurrentDate屬性信息。只需要添加如下代碼即可:
<p>Thecurrent date is @ViewBag.CurrentDate.ToLongDateString()</p>
注意@前綴用于在C#代碼和HTML標(biāo)記之間轉(zhuǎn)換。最終顯示結(jié)果如圖2.6。
圖2.6? 在頁(yè)面顯示ViewBag中自定義的內(nèi)容
我們通過(guò)默認(rèn)的HomeController演示了在MVC項(xiàng)目中控制器和視圖的基本用法,但只是向頁(yè)面輸出一個(gè)簡(jiǎn)單的字符串消息是沒(méi)有多大的吸引力的,下一節(jié)我們將為應(yīng)用程序添加交互功能,將允許用戶通過(guò)程序添加一些信息條目到GuestBook。
?
總結(jié)
以上是生活随笔為你收集整理的ASP.NET - MVC框架及搭建教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Quartz】Spring3.2.9
- 下一篇: 在ASP.NET中利JavaScript