天天看點

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

本節書摘來自異步社群《asp.net mvc 4 實戰》一書中的第2章,第2.2節,作者: 【美】jeffrey palermo , 【美】jimmy bogard , 【美】eric hexter , 【美】matthew hinze , 【英】jeremy skinner,譯者: 徐燕萍 , 李萍 , 林逸 , 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

asp.net mvc 4 實戰

現在,你的pc機上已經安裝了asp.net mvc,可以建立第一個mvc應用程式了。我們首先使用預設模闆簡單地建立一個新項目,然後擴充它顯示一些動态内容。在此之後,将漫遊一個标準的項目布局,以使你明白構成一個mvc應用程式的各個元件。

建立新的mvc項目是一個簡單的過程—在visual studio 2010(或visual web developer express)中點選“檔案”(file)菜單并選擇“新項目”(new project),将彈出“新項目”(new project)對話框,如圖2.3所示。

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

我們将使用c#語言來建立這個應用程式(當然,也可以使用vb.net等其他語言)。在左側面闆選擇“visual c#”,然後選“web”子節點。這裡有幾個模闆可以用來建立web應用程式。但對于這個示例,要選擇“asp.net mvc 4 web application”(asp.net mvc 4 web應用程式)。如果看不到這個可選項,請確定對話框頂部的目标架構設定為“.net framework 4”。

将該項目命名為guestbook,并将其儲存在預設的項目位置(通常是c:users<你的使用者名>documentsvisual studio 2010projects檔案夾)。

點選“ok”按鈕之後,visual studio将打開另一個對話框,向你提示更多資訊,如圖2.4所示。

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

項目模闆、視圖引擎,以及是否使用單元測試項目

在這裡,你可以選擇想使用的模闆。“空模闆”(empty template)提供了一個非常簡單的空項目結構。“internet應用程式”(internet application)模闆有一些基本的布局和認證特性。“企業内部網應用程式”(intranetapplication)模闆類似于internet應用程式,但它使用windows認證,而不是asp.net的表單認證。為簡單起見,請選擇“internet應用程式”模闆。

你也可以選擇想使用的視圖引擎(view engine)。對于此例,使用預設選項razor,這是mvc 3引入的新引擎。另一個選項是使用舊式的web form視圖引擎,這是mvc 1、2的預設選項。在第3章和第17章中,我們将會更詳細地考察視圖引擎。

最後,你可以選擇是否要建立單元測試項目。對于大多數非尋常的應用程式(不是太簡單的項目—譯者注),編寫單元測試是一種好的思想,這可以確定軟體的行為正确。選中這一複選框,以建立測試項目—盡管在第4章之前我們暫時不會詳細考察它。點選“ok”按鈕建立該項目。

此刻,可以啟動該應用程式。通過按ctrl +f5組合鍵,或者,點選visual studio工具欄上的“調試”(debug)按鈕,然後選“開始執行(不調試)”(start without debugging)便可以運作。這會啟動asp.net的“開發伺服器”(development server)(這是visual studio内置的一個簡單的web伺服器,為web應用程式提供了開發期間的運作環境 —譯者注),并會在預設的web浏覽器中打開此應用程式,如圖2.5所示。

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

在深入考察為guestbook增加功能之前,先簡要考察一下這種預設項目模闆的各個部分。

打開這個建立的項目,會看到該預設項目模闆有幾個含有各種檔案的子目錄。在visual studio的“解決方案資料總管”(solution explorer)中可以看到它們,如圖2.6所示。

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

controllers、models、views,以及scripts等。

該預設項目模闆中的每一個檔案和目錄都服務于特定的目的,逐一考察如下:

1.app_data目錄

app_data目錄可以用來存放資料庫、xml檔案,或應用程式所需的其他資料。asp.net運作時能了解這種特殊目錄,并會阻止使用者直接通路其中的檔案。隻有應用程式才可以讀寫該目錄。

2.conetnt目錄

content目錄的目的是包含需要随應用程式一起部署的各種非編碼資源。這些資源包括圖像和css(樣式表)檔案等。預設情況下,content目錄含有項目所使用的預設樣式表(site.css),以及themes子目錄,其中含有jquery ui所使用的圖像和css(jquery ui是用于使用者界面元素的一個用戶端架構,我們将在第7章進行考察)。

3.controllers目錄

回顧第1章,你可能還記得,控制器是負責處理輸入并決定應該執行哪一個動作(如渲染一個視圖)的協調程式。在asp.net mvc中,控制器是用controllers目錄中的類來表示的。預設情況下,該目錄含有兩個控制器—homecontroller(處理通路首頁的請求)和accountcontroller(處理身份認證)。我們将在2.2.3小節考察控制器。

4.models目錄

models目錄典型地用于容納表示應用程式核心概念的各種類,或者将資料限制成某種格式的類,這些類專用于特定的視圖,故稱為視圖模型(view model)。随着應用程式變大,你可能會決定将這些類移到一個單獨的項目之中,但對于小型項目而言,把它們存放在models目錄中是一種良好的開端。預設項目在這個目錄中包含了一個檔案—accountmodels.cs。它包含了幾個與認證有關的類,這些類是由預設項目模闆來使用的。

5.scripts目錄

scripts目錄是存放由應用程式所使用的各種javascript檔案的地方。預設項目模闆在這個目錄中包含了相當多的檔案,包括流行的開源jquery庫(将在第7章介紹)和用于執行用戶端驗證的腳本。

6.views目錄

views目錄含有用于渲染使用者界面的模闆。其中每一個模闆都被表示成一個razor視圖(.cshtml或.vbhtml檔案),并被放在以負責渲染該視圖的控制器為名稱的子目錄中。如果這聽起來有點困惑,不必擔心,我們将在2.2.3小節探讨控制器、動作以及視圖之間的關系。

7.global.asax

global.asax檔案位于項目結構的根目錄中,并包含了應用程式第一次啟動時需要運作的初始化代碼,如注冊路由的代碼(将在下一小節做簡要考察)。

8.web.config

web.config檔案也位于項目結構的根目錄中,并含有asp.net mvc正确運作所必須的配置細節。

現在,你已經看到了預設的項目模闆中不同檔案的進階概述,接下來将詳細考察控制器、動作以及視圖等核心概念之間的互動。我們将使用預設的homecontroller來描述這種互動,到2.3.3小節時,我們将建立一些自己的控制器。

在第1章中曾解釋過,控制器的作用相當于一個協調程式。它可以接受輸入(通過各種資源,如表單資料或url中的資訊),但它将頁面的渲染委托給了視圖。

1.控制器類和動作方法

在asp.net mvc中,控制器被表示成繼承于controller基類的類,類中的個别方法(稱為動作(action))對應于某個url(動作是用來響應并處理某個url請求的—譯者注)。為了描述這是如何工作的,我們來看看項目的homecontroller,可以在controllers目錄中找到它。這個類的代碼如清單2.1所示。

清單2.1 預設的homecontroller

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

homecontroller是一個十分直覺的控制器類的實作。為了表明這是一個控制器,它需要繼承于controller基類,并且其名稱也要有“controller”字尾。

2.路由—将url映射到動作

此刻你可能會問:架構是如何知道将url映射到一個特定的控制器動作的?答案就在global.asax檔案的registerroutes方法中。該方法定義了将一個url模式映射到控制器或動作的路由,其實作如清單2.2所示。

清單2.2 注冊路由

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

“defaultapi”部分是用于web api的,這将在第24章介紹(web api是微軟随asp.net mvc 4一起釋出的一個web服務架構—譯者注)。注意,這裡定義了兩個條目(除“defaultapi”以外的另外兩條路由—譯者注)。第一個是ignoreroute(忽略路由),它主要是告訴架構不用擔心指定路徑的任何比對事宜。上述示例是說,不必處理含有.axd檔案擴充名(如teace.asd)的任何路徑。第二個條目是maproute(映射路由),定義了如何處理url。這條預設路由将能滿足一段時間,但後面為了提供專用于應用程式的url,你會希望添加更多路由。

每條路由都具有名稱、url定義,以及可選的預設值。我們的第一個請求“/”并沒有任何這些url片段,是以就指望這些預設值了:

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

關于路由的說明

帶有{controller}/{action}/{id}模闆的路由是一條通用路由,能夠用它對許多不同的web請求進行服務。通過使用花括号({})來表示一些記号,而封裝在括号中的單詞則對應于mvc架構能夠了解的值(這裡的描述不夠明确。{controller}/{action}/{id}稱為該路由的url模式,在這個模式中用花括号指定了controller、action、id三個路由變量,架構将其了解為控制器、動作以及傳遞給動作的參數(id)。如果一個請求的url與這個模式相比對,則路由系統會根據url為這三個變量提取相應的值,以确定該請求要調用的控制器和動作,以及傳遞給動作的參數—譯者注)。

我們将在第9章更深入地探讨路由。

再回頭看清單2.1中的homecontroller,其index動作含有兩行代碼:

第一行将一些任意文本賦給了viewbag,而第二行則是訓示架構應該去渲染一個視圖。

viewbag本質上是一個字典—它提供了一種存儲資料的方式,這些資料随後能夠在視圖中進行通路。它使用了.net 4的動态語言特性,以便能夠動态地建立屬性。例如,可以用一行代碼将另一個屬性賦給viewbag:

該語句簡單地将目前日期和時間賦給了viewbag上的一個名稱為currentdate的屬性。該屬性是動态建立的,而且,為了添加這一屬性,不需要修改類定義(指不需要修改viewbag類—譯者注)。現在,我們可以在視圖中通路該屬性,該視圖是通過調用return view()來渲染的。

view方法(傳回的是viewresult執行個體)訓示架構應該去渲染一個視圖。在此例中,我們未指定視圖名,是以架構會推斷它應該嘗試渲染一個與動作同名的視圖—index—架構将試圖在項目的views目錄以及以控制器命名的子目錄(此例為home)中查找該視圖。

3.視圖

如果回頭看圖2.5中的項目結構,會發現在views/home子目錄中,确實有一個名為index.cshtml的檔案。打開這個檔案會看到index.cshtml中的以下部分标記:

《ASP.NET MVC 4 實戰》----2.2 建立第一個MVC應用程式

這個index視圖是c#代碼和html标記的混合體。檔案的頂部包含一個設定頁面标題的代碼塊,然後在<code>&lt;h2/&gt;</code>元素中顯示了一條消息。對@viewbag.message的調用寫出了在控制器中對viewbag的message屬性所設定的内容。

你可以修改此視圖,讓其也顯示添加到viewbag的currentdate屬性的值。隻需要對index.cshtml檔案添加以下代碼:

``

the current date is

@viewbag.currentdate.tolongdatestring()

注意,@字首表示html與代碼之間的轉換。最終結果如圖2.7所示。

圖2.7 含有目前日期的自定義viewbag條目的内容被顯示在頁面上

以上預設的homecontroller描述了mvc應用程式中控制器和視圖的基本使用,但在螢幕上顯示一條簡單的消息并無多大意義。在下一節中,我們将對應用程式添加一些互動性,讓使用者能夠對留言簿添加條目。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀