Net MVC基礎教程_第1頁
Net MVC基礎教程_第2頁
Net MVC基礎教程_第3頁
Net MVC基礎教程_第4頁
Net MVC基礎教程_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、應用程序開發(fā)中,例如頁面代碼只進行頁面布局和樣式的輸出而代碼頁面只負責進行邏輯的處理。為了解決這個問題,微軟開發(fā)了MVC開發(fā)模式方便開發(fā)人員進行分層開發(fā)。17.1 了解MVCMVC是一個設計模式,MVC能夠?qū)SP.NET應用程序的視圖、模型和控制器進行分開,開發(fā)人員能夠在不同的層次中進行應用程序?qū)哟蔚拈_發(fā),例如開發(fā)人員能夠在視圖中進行頁面視圖的開發(fā),而在控制器中進行代碼的實現(xiàn)。 MVC和Web Form在ASP.NET Web Form的開發(fā)當中,用戶能夠方便的使用微軟提供的服務器控件進行應用程序的開發(fā),從而提高開發(fā)效率。雖然ASP.NET Web Form提高了開發(fā)速度、維護效率和代碼的復

2、用性,但是拋棄了傳統(tǒng)的網(wǎng)頁編程模型,在很多應用問題的解決上反而需要通過復雜的實現(xiàn)完成。在ASP.NET MVC模型中,ASP.NET MVC模型給開發(fā)人員的感覺仿佛又回到了傳統(tǒng)的網(wǎng)頁編程模型中(如ASP編程模型),但是ASP.NET MVC模型與傳統(tǒng)的ASP同樣是不同的編程模型,因為ASP.NET MVC模型同樣是基于面向?qū)ο蟮乃枷脒M行應用程序的開發(fā)。相比之下,ASP.NET MVC模型是一種思想,而不是一個框架,所以ASP.NET MVC模型與ASP.NET Web Form并不具有可比性。同樣ASP.NET MVC模型也不是ASP.NET Web Form 4.0,這兩個開發(fā)模型就好比一個

3、是汽車一個是飛機,而兩者都能夠達到同樣的目的。應用程序一樣。當用戶通過瀏覽器請求服務器中的某個頁面時,其實是實現(xiàn)了ASP.NET MVC模型中的一個方法,而不是具體的頁面,這在另一種程度上實現(xiàn)了URL偽靜態(tài)。當用戶通過瀏覽器請求服務器中的某一個路徑時,ASP.NET MVC應用程序會攔截相應的地址并進行路由解析,通過應用程序中編程實現(xiàn)展現(xiàn)一個頁面給用戶,這種頁面展現(xiàn)手法同傳統(tǒng)的ASP.NET Web From應用程序與其他的如ASP,PHP等應用程序都不相同。同時,隨著互聯(lián)網(wǎng)的發(fā)展,搜索引擎在Web開發(fā)中起著重要的作用,這就對頁面請求的地址有了更加嚴格的要求。例如百度、谷歌等搜索引擎會對目錄形

4、式的頁面路徑和靜態(tài)形式的頁面路徑收錄的更好,而對于動態(tài)的如abc.aspx?id=1&action=add&t=3這種樣式的頁面路徑不甚友好。另外,所有引擎又在一定程度上決定了Web應用的熱度,例如當在百度中搜索“鞋”這個關鍵字時,如果搜索的結果中客戶的網(wǎng)站在搜索結果的后幾頁,用戶通常不會進行翻頁查詢,相比之下用戶更喜歡在搜索結果中查看前幾頁的內(nèi)容。ASP.NET MVC開發(fā)模型在用戶進行頁面請求時會進行URL攔截并通過相應的編程實現(xiàn)訪問路徑和頁面的呈現(xiàn),這樣就能夠更加方便的實現(xiàn)目錄形式的頁面路徑和靜態(tài)形式,對于Web應用動態(tài)的地址如abc.aspx?id=1&acti

5、on=add&t=3可以以abc/action/id/add的形式呈現(xiàn),這樣就更加容易的被搜索引擎所搜錄。注意:ASP.NET MVC模型和ASP.NET Web Form并不具備可比性,因為ASP.NET MVC模型和ASP.NET Web Form是不同的開發(fā)模型,而ASP.NET MVC模型和ASP.NET Web Form在各自的應用上都有有點和缺點,并沒有哪個開發(fā)模型比另一個模型好之說。17.1.2 ASP.NET MVC的運行結構在ASP.NET MVC開發(fā)模型中,頁面的請求并不是像傳統(tǒng)的Web應用開發(fā)中的請求一樣是對某個文件進行訪問,初學者可能會在一開始覺得非常的不適應。

6、例如當用戶訪問/home/abc.aspx時,在服務器的系統(tǒng)目錄中一定會存在abc.aspx這個頁面,而對于傳統(tǒng)的頁面請求的過程也非常容易理解,因為在服務器上只有存在了home文件夾,在home文件夾下一定存在abc.aspx頁面才能夠進行相應的頁面訪問。對于ASP.NET MVC開發(fā)模型而言,當請求URL路徑為“”頁面,而可能是服務器中某個方法。在ASP.NET MVC應用程序中,頁面請求的地址不能夠按照傳統(tǒng)的概念進行分析,要了解ASP.NET MVC應用程序的頁面請求地址就需要了解ASP.NET MVC開發(fā)模型的運行結構。ASP.NET MVC開發(fā)模型的運行結構如圖17-1所示。圖17-1

7、 ASP.NET MVC開發(fā)模型正如圖17-1所示,ASP.NET MVC開發(fā)模型包括三個模塊,這三個模塊分別為MVC的M、V、C,其中M為Models(模型)、V為Views(視圖)、C為Controllers(控制器),在ASP.NET MVC開發(fā)模型中,這三個模塊的作用分別如下所示。q Models:Models負責與數(shù)據(jù)庫進行交互,在ASP.NET MVC框架中,使用LINQ進行數(shù)據(jù)庫連接和操作。q Views:Views負責頁面的頁面呈現(xiàn),包括樣式控制,數(shù)據(jù)的格式化輸出等。q Controllers:Controllers負責處理頁面的請求,用戶呈現(xiàn)相應的頁面。與傳統(tǒng)的頁面請求和頁面

8、運行方式不同的是,ASP.NET MVC開發(fā)模型中的頁面請求首先會發(fā)送到Controllers中,Controllers再通過Models進行變量聲明和數(shù)據(jù)讀取。Controller通過頁面請求和路由設置呈現(xiàn)相應的View給瀏覽器,用戶就能夠在瀏覽器中看到相應的頁面。這里講解ASP.NET MVC開發(fā)模型的工作流程可能會讓讀者感到困惑,具體ASP.NET MVC開發(fā)模型的工作流程會在后面詳細講解。17.2 ASP.NET MVC基礎ASP.NET MVC開發(fā)模型和ASP.NET Web From開發(fā)模型并不相同,ASP.NET MVC為ASP.NET Web開發(fā)進行了良好的分層,ASP.NET

9、 MVC開發(fā)模型和ASP.NET Web From開發(fā)模型在請求處理和應用上都不盡相同,只有了解ASP.NET Web From開發(fā)模型的基礎才能夠高效的開發(fā)MVC應用程序。 安裝ASP.NET MVCASP.NET MVC是微軟推出的最新的ASP.NET Web開發(fā)模型,開發(fā)人員可以在微軟的官方網(wǎng)站上下載ASP.NET MVC安裝程序,也能夠使用光盤中附屬的ASP.NET MVC安裝程序進行安裝,光盤中附帶的是ASP.NET MVC beta版本,正式版同beta版本基本上沒有任何區(qū)別,開發(fā)人員可以在官方網(wǎng)站下載最新的安裝程序。單擊下載或附錄中的AspNetMVCBeta-setup.msi

10、進行ASP.NET MVC開發(fā)模型的安裝和相應示例的安裝,如圖17-2所示。用戶單擊ASP.NET MVC安裝界面中的【Next】按鈕進入ASP.NET MVC安裝的用戶條款界面,單擊【I accept the terms int the License Agreement】復選框同意ASP.NET MVC用戶條款,如圖17-3所示。同意后單擊【Next】按鈕進入ASP.NET MVC安裝準備界面,進入安裝界面后單擊【Install】按鈕進行安裝。圖17-2 ASP.NET MVC安裝界面 圖17-3 ASP.NET MVC用戶條款注意:在安裝ASP.NET MVC前必須安裝Visual St

11、udio 2008進行ASP.NET MVC應用程序的開發(fā),安裝完成ASP.NET MVC應用程序后就能夠在Visual Studio 2008進行創(chuàng)建ASP.NET MVC應用程序。單擊【Install】按鈕應用程序,系統(tǒng)就會在計算機中安裝ASP.NET MVC開發(fā)模型和Visual Studio 2008中進行ASP.NET MVC程序開發(fā)所需要的必備組件以便在Visual Studio 2008為開發(fā)人員提供原生的ASP.NET MVC開發(fā)環(huán)境。安裝完畢后,安裝程序會提示ASP.NET MVC安裝程序已經(jīng)安裝完畢,安裝完畢后開發(fā)人員就能夠使用Visual Studio 2008開發(fā)ASP

12、.NET MVC應用程序。安裝過程如圖17-4和17-5所示。圖17-4 ASP.NET MVC安裝 圖17-5 ASP.NET MVC安裝完畢新建一個MVC應用程序安裝完成ASP.NET MVC開發(fā)模型后就能夠在Visual Studio 2008中創(chuàng)建ASP.NET MVC應用程序進行ASP.NET MVC應用程序的開發(fā),安裝ASP.NET MVC開發(fā)模型后,Visual Studio 2008就能夠為ASP.NET MVC提供原生的開發(fā)環(huán)境。在菜單欄中選擇【文件】選項,單擊【文件】選項在下拉菜單中選擇【新建項目】就能夠創(chuàng)建ASP.NET MVC應用程序,如圖17-6所示。單擊【確定】按鈕

13、后就能夠創(chuàng)建ASP.NET MVC應用程序。Visual Studio 2008為ASP.NET MVC提供了原生的開發(fā)環(huán)境,以及智能提示,開發(fā)人員在進行ASP.NET MVC應用程序開發(fā)中,Visual Studio 2008同樣能夠為ASP.NET MVC應用程序提供關鍵字自動補完、智能解析等功能以便開發(fā)人員高效的進行ASP.NET MVC應用程序的開發(fā)。創(chuàng)建ASP.NET MVC應用程序后,系統(tǒng)會自動創(chuàng)建若干文件夾和文件,如圖17-7所示。圖17-6 創(chuàng)建ASP.NET MVC應用程序 圖17-7 自動創(chuàng)建的文件在自動創(chuàng)建的文件中,這些文件包括ASP.NET MVC應用程序中最重要的文件

14、夾用于分層開發(fā),這些文件夾分別為Models、Views和Controllers,分別對應ASP.NET MVC開發(fā)模型的Models(模型)、Views(視圖)、Controller(控制器),開發(fā)人員能夠在相應的文件夾中創(chuàng)建文件進行ASP.NET MVC應用程序的開發(fā)。17.2.3 ASP.NET MVC應用程序的結構在創(chuàng)建完成ASP.NET MVC應用程序,系統(tǒng)會默認創(chuàng)建一些文件夾,這些文件夾不僅包括對應ASP.NET MVC開發(fā)模型的Models、Views和Controllers文件夾,還包括配置文件Web.config、Global.aspx和Default.aspx。1:頁面驅(qū)動

15、Default.aspx用于ASP.NET MVC應用程序程序的驅(qū)動,當用戶執(zhí)行相應的請求時,Default.aspx能夠驅(qū)動ASP.NET MVC應用程序頁面的處理和生成,Default.aspx頁面代碼如下所示。<% Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="_17_1._Default" %>。IHttpHandler類獲取和發(fā)送HTTP請求,Default.aspx.cs頁面代

16、碼如下所示。using System.Web;using System.Web.Mvc;/使用Mvc命名空間using System.Web.UI;namespace _17_1 public partial class _Default : Page public void Page_Load(object sender, System.EventArgs e) plicationPath);/攔截虛擬目錄根路徑 IHttpHandler httpHandler = new MvcHttpHandler(); httpHandler.ProcessRequest(HttpContext.Cu

17、rrent); 上述代碼用于ASP.NET MVC應用程序的驅(qū)動。在ASP.NET MVC應用程序被運行時,會攔截虛擬目錄的根路徑將請求發(fā)送到Controllers實現(xiàn)。2Global.asax:全局配置文件是全局配置文件,在ASP.NET MVC應用程序中的應用程序路徑是通過Global.asax文件進行配置和實現(xiàn)的,頁面代碼如下所示。using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;/使用Mvc命名空間using ;/使用Mvc命名空間n

18、amespace _17_1 / Note: For instructions on enabling IIS6 or IIS7 classic mode, public static void RegisterRoutes(RouteCollection routes) routes.IgnoreRoute("resource.axd/*pathInfo"); routes.MapRoute( "Default",/配置路由名稱 "controller/action/id",/配置訪問規(guī)則 new controller = &quo

19、t;Home", action = "Index", id = "" /為訪問規(guī)則配置默認值 );/配置URL路由 protected void Application_Start() RegisterRoutes(RouteTable.Routes); 上述代碼在應用程序運行后能夠?qū)崿F(xiàn)相應的URL映射,當用戶請求一個頁面時,該頁面會在運行時啟動并指定ASP.NET MVC應用程序中URL的映射以便將請求提交到Controllers進行相應的編程處理和頁面呈現(xiàn)。實現(xiàn)了偽靜態(tài)的URL配置,例如當用戶訪問/home/guestbook/number

20、服務器路徑時,通過URLRouting夠?qū)崿F(xiàn)服務器路徑/home/guestbook/number到number.aspx的映射。有關URLRouting的知識會在后面的小結中講解。注意:在ASP.NET MVC開發(fā)模型中,瀏覽器地址欄的URL并不能夠被稱為是偽靜態(tài),為了方便讀者的理解可以暫時稱為偽靜態(tài),但是最主要的是要理解訪問的路徑并不像傳統(tǒng)的Web開發(fā)中那樣是訪問真實的某個文件。3Models、Views和Controllers三層結構Models、Views和Controllers文件夾是ASP.NET MVC開發(fā)模型中最為重要的文件夾,雖然這里以文件夾的形式呈現(xiàn)在解決方案管理器中,其實

21、并不能看作傳統(tǒng)的文件夾。Models、Views和Controllers分別用于存放ASP.NET MVC應用程序中Models、Views和Controllers的開發(fā)文件。在創(chuàng)建ASP.NET MVC應用程序后,系統(tǒng)會自行創(chuàng)建相應的文件,這里也包括ASP.NET MVC應用程序樣例,如圖17-8和圖17-9所示。圖17-8 Views視圖文件夾 圖17-9 Controllers控制器文件夾正如圖17-8、17-9所示,在樣例中分別創(chuàng)建了若干Controllers控制器文件,以及Views頁面文件。運行ASP.NET MVC應用程序后,用戶的請求會發(fā)送到Controllers控制器中,Co

22、ntrollers控制器接受用戶的請求并通過編程實現(xiàn)Views頁面文件的映射。運行ASP.NET MVC應用程序創(chuàng)建ASP.NET MVC應用程序后就能夠直接運行ASP.NET MVC應用程序,默認的ASP.NET MVC應用程序已經(jīng)提供了樣例方便開發(fā)人員進行編程學習,單擊【F5】運行ASP.NET MVC應用程序,運行后如圖17-10所示。在創(chuàng)建ASP.NET MVC應用程序后系統(tǒng)會創(chuàng)建樣例,圖17-10顯式的就是ASP.NET MVC默認運行界面,單擊旁邊的【About Us】連接頁面跳轉到相應的頁面,如圖17-11所示。圖17-10 ASP.NET MVC應用程序初始界面 圖17-11

23、About頁面當單擊【About Us】鏈接后,頁面會跳轉到關于頁面,頁面URL為http:/localhost:2448/Home/About。在ASP.NET MVC應用程序中,URL路徑的請求方式與傳統(tǒng)的ASP.NET Web Form應用程序不同,開發(fā)人員可以發(fā)現(xiàn),在服務器文件中并沒有/Home/About/index.aspx文件也沒有/Home/About/這個目錄。注意:在ASP.NET MVC應用程序中,這里再三強調(diào),其URL并不是服務器中的某個文件而是一種地址映射。在服務器中沒有/Home/About/index.aspx文件也沒有/Home/About/這個目錄,因為/Ho

24、me/About中所呈現(xiàn)的頁面是通過Controller控制器進行相應的文件的路徑的映射的,關于地址映射的內(nèi)容會在后面的小結中詳細講解。17.3 ASP.NET MVC原理運行了ASP.NET MVC應用程序后,就能夠通過相應的地址訪問不同的頁面。在ASP.NET MVC應用程序中,應用程序中頁面的URL并不是在服務器中實際存在的頁面或目錄而是訪問了相應的方法s實現(xiàn)了URL映射。17.3.1 ASP.NET MVC運行流程。同樣當訪問相應的ASP.NET MVC應用程序頁面,在服務器中并不存在對應的頁面。為了了解如何實現(xiàn)頁面映射,就需要了解ASP.NET MVC應用程序的運行流程。s實現(xiàn)了UR

25、L映射。當用戶進行ASP.NET MVC程序的頁面請求時,該請求首先會會被發(fā)送到Controllers控制器中,開發(fā)人員能夠在控制器Controllers中創(chuàng)建相應的變量并將請求發(fā)送到Views視圖中,Views視圖會使用在Controllers控制器中通過編程方式創(chuàng)建相應的變量并呈現(xiàn)頁面在瀏覽器中。當用戶在瀏覽器中對Web應用進行不同的頁面請求時,該運行過程將會循環(huán)反復。對于Models而言,Controller通常情況下使用Models讀取數(shù)據(jù)庫。在Models中,Models能夠?qū)鹘y(tǒng)的關系型數(shù)據(jù)庫映射成面向?qū)ο蟮拈_發(fā)模型,開發(fā)人員能夠使用面向?qū)ο蟮乃枷脒M行數(shù)據(jù)庫的數(shù)據(jù)存取。Contro

26、llers從Model中讀取數(shù)據(jù)并存儲在相應的變量中,如圖17-12所示。圖17-12 ASP.NET MVC運行流程正如圖17-12所示,在用戶進行頁面請求時,首先這個請求會發(fā)送到Controllers中,Controllers從Models中讀取相應的數(shù)據(jù)并填充Controllers中的變量,Controllers接受相應請求再將請求發(fā)送到Views中,Views通過獲取Controllers中的變量的值進行整合并生成相應的頁面到用戶瀏覽器中。在Models中需要將數(shù)據(jù)庫抽象成面向?qū)ο笾械囊粋€對象,開發(fā)人員能夠使用LINQ進行數(shù)據(jù)庫的抽象,這樣就能夠方便的將數(shù)據(jù)庫中的數(shù)據(jù)抽象成相應的對象并

27、通過對象的方法進行數(shù)據(jù)的存取和更新。17.3.2 ASP.NET MVC工作原理正如上一節(jié)中講解的ASP.NET MVC工作流程,在ASP.NET MVC應用程序中,系統(tǒng)默認創(chuàng)建了相應的文件夾進行不同層次的開發(fā),在ASP.NET MVC應用程序的運行過程中,同樣請求會發(fā)送到Controllers中,這樣就對應了ASP.NET MVC應用程序中的Controllers文件夾,Controllers只負責數(shù)據(jù)的讀取和頁面邏輯的處理。在Controllers讀取數(shù)據(jù)時,需要通過Models中的LINQ to SQL從數(shù)據(jù)中讀取相應的信息,讀取數(shù)據(jù)完畢后,Controllers再將數(shù)據(jù)和Control

28、ler整合并提交到Views視圖中,整合后的頁面將通過瀏覽器呈現(xiàn)在用戶面前。當用戶訪問http:/localhost:2448/Home/About頁面時,首先這個請求會發(fā)送到Controllers中,Controllers通過Global.ascx文件中的路由設置進行相應的URL映射,Global.ascx文件相應代碼如下所示。 public static void RegisterRoutes(RouteCollection routes)/注冊路由 routes.IgnoreRoute("resource.axd/*pathInfo"); routes.MapRout

29、e( "Default", "controller/action/id", new controller = "Home", action = "Index", id = "" /配置路由 ); 上述代碼中實現(xiàn)了映射操作,具體是如何實現(xiàn)可以先無需關心,首先需要看看Controllers文件夾內(nèi)的文件,以及Views文件夾的文件,如圖17-13所示。圖17-13 Controller文件夾和Views文件夾從圖17-13中可以看出,在Views中包含Home文件夾,在Home文件夾中存在About

30、.aspx和Index.aspx文件,而同樣在Controllers文件夾中包含與Home文件夾同名的文件。當用戶訪問st:2448/Home/About路徑時,首先該路徑請求會傳送到Controller中。注意:在Controllers文件夾中創(chuàng)建文件同Home是同名文件,在Controllers中創(chuàng)建的文件,其文件名后的是不能更改的,所以文件也可以看做是Home文件夾的同名文件。在Controller中,Controller通過相應的編程實現(xiàn)路徑的映射,示例代碼如下所示。 HandleError public class HomeController : Controller public

31、 ActionResult About()/實現(xiàn)About頁面 ViewData"Title" = "About Page" return View();/返回視圖 上述代碼實現(xiàn)了About頁面的頁面呈現(xiàn),在運行相應的方法后會返回一個View,這里默認返回的是與Home的About方法同名的頁面,這里是about.aspx,about.aspx頁面代碼如下所示。<% Page Language="C#" MasterPageFile="/Views/Shared/Site.Master" AutoEventW

32、ireup="true" CodeBehind="About.aspx.cs" Inherits="_17_1.Views.Home.About" %><asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> <h2>About Us</h2> <p> TODO: Put <em>about</em&

33、gt; content here. </p></asp:Content>將about.aspx頁面中的文字進行相應的更改,示例代碼如下所示。<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> <h2>About Us</h2> <p><span style=”color:red”>這是一個關于頁面</span> </p>

34、;</asp:Content>運行about.aspx頁面,運行后如圖17-14所示。圖17-14 修改后的About Us頁面從上述代碼可以看出,Controllers與Global.ascx用于URL的映射,而Views用于頁面的呈現(xiàn)。從這里可以看出,當用戶訪問http:/localhost:2448/Home/About頁面時,訪問的并不是服務器中的/Home/About頁面,而訪問的是Controllers中的HomeControllers的About方法。注意:ASP.NET MVC應用程序中的URL路徑訪問的并不是一個頁面,而是一個方法,例如訪問/Home/About頁

35、面就是訪問的是HomeControllers中的About方法,而訪問/Account/Login頁面就是訪問的是AccountControllers中的Login方法。在ASP.NET MVC應用程序中,ASP.NET MVC應用程序的對應關系如圖17-15所示。圖17-15 ASP.NET MVC應用程序關系圖在ASP.NET MVC應用程序中,HomeController.cs對應Views的Home文件夾,而其中的Index方法和About方法對應Index.aspx文件和About.aspx文件。,而訪問路徑為XXX/YYY是訪問的是XXXController.cs中的YYY()方法

36、。實現(xiàn)相應的URL映射需要通過修改Global.ascx文件進行實現(xiàn),如何通過修改Global.ascx文件進行不同的URL映射將在后面的小結中講解。17.4 ASP.NET MVC開發(fā)在了解了ASP.NET MVC工作原理和工作流程,以及ASP.NET MVC中的URL映射基礎原理,就能夠進行ASP.NET MVC應用程序的開發(fā),在進行ASP.NET MVC應用程序開發(fā)的過程中可以深入的了解ASP.NET MVC應用程序模型和URL映射原理。創(chuàng)建ASP.NET MVC頁面ASP.NET MVC應用程序包括MVC三個部分,其中Models是用于進行數(shù)據(jù)庫抽象,Views是用于進行視圖的呈現(xiàn)而C

37、ontrollers是用于控制器和邏輯處理,在創(chuàng)建ASP.NET MVC應用程序時,可以為ASP.NET MVC應用程序分別創(chuàng)建相應的文件。首先在Views文件夾中創(chuàng)建一個文件夾,這里創(chuàng)建一個Beta文件夾。創(chuàng)建文件夾后單擊Beta文件夾,右擊文件夾,在下拉菜單中選擇【添加】選項,在【添加】選項中單擊【新建項】選項,單擊后系統(tǒng)會彈出對話框用于View文件的創(chuàng)建,如圖17-16所示。圖17-16 創(chuàng)建View文件在Views中可以創(chuàng)建MVC View Page用于Views文件的創(chuàng)建,從而用于在ASP.NET MVC應用程序中中可以編寫相應的代碼用于視圖的呈現(xiàn),Index.aspx頁面代碼如下所

38、示。<% Page Language="C#" AutoEventWireup="true" CodeBehind="Beta.aspx.cs" Inherits="_17_1.Views.Beta.Beta" %><h2>About Us</h2><p> <span style="color:red">這是一個測試頁面</span></p>Index.aspx頁面用于視圖的呈現(xiàn),在中,的,而ASP.NET MV

39、C應用程序頁面代碼需要派生自ViewPage,示例頁面代碼如下所示。using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;/使用MVC命名空間 public partial class Index : ViewPage/派生自ViewPage 在完成Beta.aspx的創(chuàng)建后,在ASP.NET MVC應用程序開發(fā)模型中還需要創(chuàng)建Controllers用于接受用戶請求和Beta.aspx頁面同名的方法實現(xiàn)。單擊Controllers文件夾,右擊Co

40、ntrollers文件夾,在下拉菜單中選擇【添加】選項,在【添加】選項中單擊【新建項】選項。這里可以創(chuàng)建一個同名的類文件,如圖17-17所示。圖17-17 創(chuàng)建Controllers文件創(chuàng)建Controllers類文件時,創(chuàng)面的類文件的名稱必須為Views文件夾中相應的視圖文件夾的名稱加上Controllers.cs,正如圖17-17所示,如創(chuàng)建的是“Beta”文件夾,在創(chuàng)建Controllers時必須創(chuàng)建BetaControllers.cs,在創(chuàng)建相應的類文件后才能夠攔截相應的URL并進行地址映射,創(chuàng)建后的Controllers類文件代碼如下所示。using System;using Sys

41、tem.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;/使用MVC命名空間using System.Web.Mvc.Ajax;/使用MVC命名空間 HandleError public class BetaController : Controller public ActionResult Index()/實現(xiàn)Index方法 return View();/返回Index視圖 頁面的訪問。Views中的。單擊【F5】運行頁面,運行后如圖17-18所示。圖17-18 MVC頁面運行這里講解了

42、如何手動創(chuàng)建ASP.NET MVC頁面。在某些版本的Visual Studio中,安裝了ASP.NET MVC開發(fā)包應用程序后,可能不會存在MVC文件的創(chuàng)建,這時只能通過創(chuàng)建ASP.NET Web Form再通過編碼實現(xiàn)。如果希望能夠創(chuàng)建ASP.NET MVC模板而不使用手動創(chuàng)建可以在C:Program FilesMicrosoft ASP.NETASP.NET MVC BetaTemp目錄下將壓縮包拷貝到相應的Visual Studio安裝目錄X:Microsoft Visual Studio 9.0Common7IDEItemTemplatesCSharpWeb2052中,拷貝后在開始菜單

43、中選擇“運行”,在窗口中輸入cmd,就會彈出一個黑色的命令行窗口,在命令行輸入cd X:Microsoft Visual Studio 9.0Common7IDEItemTemplatesCSharpWeb2052進入目錄,輸入devenv.exe /setup進行模板的安裝,安裝完成后就能夠在添加新項中選擇MVC應用程序模板。17.4.2 ASP.NET MVC 數(shù)據(jù)呈現(xiàn)(ViewData)在ASP.NET MVC應用程序中,Controllers負責數(shù)據(jù)的讀取而Views負責界面的呈現(xiàn),在界面的呈現(xiàn)中Views通常不進行數(shù)據(jù)的讀取和邏輯運算,數(shù)據(jù)的讀取和邏輯運算都交付給Controller

44、s負責。為了能夠方便的將Controllers與Views進行整合并在Views中呈現(xiàn)Controllers中的變量,可以使用ViewData整合Controllers與Views從而進行數(shù)據(jù)讀取和顯示。在ASP.NET MVC應用程序的Views中,其值并不是固定的,而是通過Controllers傳遞過來的,在Controllers類文件中的頁面實現(xiàn)代碼中,可以需要使用ViewData進行值的傳遞,BetaControllers.cs中Index.aspx實現(xiàn)的Index()的方法示例代碼如下所示。 HandleError public class BetaController : Cont

45、roller public ActionResult Index()/實現(xiàn)Index方法 ViewData"beta" = "這是一個ViewData字符串"/使用ViewData return View();/返回視圖 上述代碼使用ViewData存儲數(shù)據(jù),ViewData的聲明和賦值方式與Session對象相同,直接通過編寫ViewData鍵值的名稱=XXX進行相應的鍵值的賦值。如果需要在頁面中進行相應的值的呈現(xiàn),只需要輸出ViewData鍵值的名稱即可。在ASP.NET MVC應用程序中,字符輸出都需要呈現(xiàn)在Views視圖中,在Controller

46、s中進行ViewData變量的賦值,就需要在Views中輸出相應的變量,BetaControllers.cs中的Index()方法實現(xiàn)的是Index.aspx頁面,在Index.aspx可以使用ViewData"beta"變量,示例代碼如下所示。<h2>About Us</h2><p> <span style="color:Red">這是一個測試頁面</span><br/> <span style="color:Green"><%=ViewDat

47、a"beta" %></span></p>上述代碼中在運行后會輸出ViewData"beta"變量中存儲的值,運行后如圖17-19所示。圖17-19 輸出ViewDataViewData不僅可以為某個具體的值,ViewData還可以是一個泛型變量,示例代碼如下所示。 HandleError public class BetaController : Controller public ActionResult Index() List<string> str = new List<string>();

48、/創(chuàng)建泛型變量 str.Add("str字符串1<hr/>");/添加成員 str.Add("str字符串2<hr/>");/添加成員 str.Add("str字符串3<hr/>");/添加成員 str.Add("str字符串4<hr/>");/添加成員 ViewData"beta" = str;/賦值ViewData return View();/返回視圖 在為ViewData賦值泛型變量后,在相應的View頁面中也可以輸出ViewData的值,

49、示例代碼如下所示。<h2>About Us</h2><p> <span style="color:Red">這是一個測試頁面</span><br/> <% foreach(string str in ViewData"beta" as List<string>) %> <% = str%></p>上述代碼通過使用foreach進行ViewData變量中相應健值的值的遍歷,運行后如圖17-20所示。圖17-20 遍歷ViewData變量的

50、值使用List類能夠?qū)?shù)據(jù)庫中的數(shù)據(jù)存放在泛型列表類中,開發(fā)人員能夠?qū)?shù)據(jù)庫中的數(shù)據(jù)遍歷并存放在Controllers類文件中的頁面實現(xiàn)的類的ViewData變量中,當需要遍歷數(shù)據(jù)進行呈現(xiàn)時,例如新聞列表或者是論壇列表等,可以通過遍歷ViewData變量的值遍歷輸出數(shù)據(jù)庫中的數(shù)據(jù)。17.4.3 ASP.NET MVC 跨頁數(shù)據(jù)呈現(xiàn)(TempData)ASP.NET MVC TempData同ASP.NET MVC ViewData一樣,是在Controllers中聲明的變量以便在Views中進行調(diào)用,示例代碼如下所示。 HandleError public class BetaControll

51、er : Controller public ActionResult Index() TempData"beta" = "TempData字符串" return View(); 上述代碼在Controllers中聲明了TempData,在Views中的相應頁面可以使用此TempData進行變量的輸出,示例代碼如下所示。<% Page Language="C#" AutoEventWireup="true" CodeBehind="Beta.aspx.cs" Inherits="

52、_17_1.Views.Beta.Index" %><h2>About Us</h2><p> <%=TempData"beta" %></p>上述代碼呈現(xiàn)了TempData變量的值,運行后如圖17-21所示。圖17-21 顯示TempData變量在數(shù)據(jù)呈現(xiàn)上,TempData變量同ASP.NET MVC ViewData基本相同,但是TempData能夠在跳轉中保存值。當用戶訪問一個頁面時,該頁面的Controllers中包含TempData變量。當這個頁面通過Redirect跳轉到另一個頁面時,另

53、一個頁面能夠使用跳轉頁面的TempData變量。在跳轉頁面中,在跳轉前可以編寫TempData變量保存相應的值,示例代碼如下所示。 HandleError public class BetaController : Controller public ActionResult Index() TempData"Index" = "這是跳轉頁面的字符串哦."/編寫TempData Response.Redirect("/Beta/Get");/頁面跳轉 return View();/返回視圖 上述忽代碼編寫了一個TempDataTemp

54、Data變量的值。創(chuàng)建完成后,編寫HTML代碼如下所示。<% Page Language="C#" AutoEventWireup="true" CodeBehind="Get.aspx.cs" Inherits="_17_1.Views.Beta.Get" %><h2>接受傳遞的參數(shù)</h2><p> <%=TempData"Index" %></p>編寫了頁面代碼后還不能對頁面進行訪問,由于MVC編程模型中路徑是訪問的Co

55、ntroller中的方法,所以還需要在Controller中實現(xiàn)Get頁面的方法,示例代碼如下所示。 public ActionResult Get() return View();/返回默認視圖 上述代碼返回默認視圖,當不給頁面文件。這里沒有對View方法傳遞參數(shù),則返回的是Get.aspx頁面視圖,當用戶訪問/Beta/路徑時,代碼會創(chuàng)建一個TempData變量并跳轉到/Beta/Get路徑,在/Beta/Get路徑相應的文件中可以獲取跳轉前的TempData變量的值,運行后如圖17-22所示。圖17-22 接受TempData變量的值TempData變量,而是在跳轉前的頁面中聲明的TempData變量,與ViewData相比跳轉后的頁面能夠獲取TempData變量的值而不能獲取ViewData的值,這在某些應用場合如拋出異常等情況下非常適用。注意:TempData變量在跳轉中能夠跨頁面進行數(shù)據(jù)讀取,但是跨頁面跳轉后TempData變量只能呈現(xiàn)一次。簡單的說就是跳轉的第一次能過獲取跳轉前頁面的TempData變量的值,而再次操作時就無法使用跳轉前頁面的TempData變量值。17.4.4 ASP.NET MVC頁面重定向在ASP.NET Web Form中,可以通過R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論