官术网_书友最值得收藏!

1.2 開(kāi)發(fā)ASP.NET 4.0應(yīng)用程序

使用ASP.NET開(kāi)發(fā)應(yīng)用程序是非常輕松的,程序員可以使用ASP.NET基于事件的編程模型,只要了解了ASP.NET的頁(yè)面執(zhí)行模型、掌握一些服務(wù)器控件的用法就能開(kāi)發(fā)出非常漂亮的Web應(yīng)用程序。作為選擇,也可以使用ASP.NET MVC基于模式的編程模型,使用一些比較先進(jìn)的軟件工程開(kāi)發(fā)方法,ASP.NET Web窗體編程與ASP.NET MVC都屬于ASP.NET這個(gè)大的開(kāi)發(fā)框架的一個(gè)組成部分,如何決擇,取決于項(xiàng)目的規(guī)模和對(duì)于模式的認(rèn)識(shí)程度,本節(jié)將帶領(lǐng)大家了解如何開(kāi)始步入ASP.NET開(kāi)發(fā)的世界。

1.2.1 準(zhǔn)備ASP.NET的開(kāi)發(fā)環(huán)境

要開(kāi)發(fā)ASP.NET應(yīng)用程序,需要安裝微軟提供的Visual Studio 2010或者是免費(fèi)的Visual Web Developer Express。Visual Web Developer Express是一個(gè)免費(fèi)的Visual Studio Web開(kāi)發(fā)環(huán)境,用來(lái)構(gòu)建和測(cè)試ASP.NET應(yīng)用程序,該工具提供了如下功能:

● 具有編輯HTML和CSS的功能強(qiáng)大的編輯器,具有語(yǔ)法高亮和智能提示功能。

● 對(duì)于ASP.NET、C#、VB.NET及JavaScript提供了強(qiáng)大的調(diào)試支持。

● 支持諸如ASP.NET MVC、AJAX、Silverlight、jQuery應(yīng)用程序開(kāi)發(fā)框架。

● 內(nèi)置的基于FTP的Web部署工具和數(shù)據(jù)庫(kù)部署環(huán)境。

● 使用內(nèi)置的Web服務(wù)器或者IIS來(lái)測(cè)試ASP.NET應(yīng)用程序。

該工具可以從ASP.NET的官方網(wǎng)站上下載,下載網(wǎng)址為http://www.asp.net/downloads,下載安裝頁(yè)面如圖1.9所示。

當(dāng)然如果具有合適的授權(quán),建議程序員在開(kāi)發(fā)生產(chǎn)用的應(yīng)用程序時(shí),使用功能強(qiáng)大的Visual Studio 2010旗艦版,Visual Studio 2010 旗艦版提供了一個(gè)包含工具和服務(wù)器基礎(chǔ)結(jié)構(gòu)的集成環(huán)境,此環(huán)境簡(jiǎn)化了整個(gè)應(yīng)用程序開(kāi)發(fā)過(guò)程。使用高效、可預(yù)知且可自定義的過(guò)程交付業(yè)務(wù)結(jié)果,并通過(guò)分析來(lái)提高整個(gè)生命周期中的透明度和可跟蹤性。也就是說(shuō),這個(gè)版本提供了全功能的開(kāi)發(fā)環(huán)境,沒(méi)有任何使用上的限制與精簡(jiǎn),試用版本可以從微軟網(wǎng)站上進(jìn)行下載并安裝。

注意:如果存在早期版本的Visual Studio,依然可以在這樣的計(jì)算機(jī)上安裝最新版本的Visual Web Developer Express,不同版本的開(kāi)發(fā)環(huán)境能夠友好的共存,對(duì)于一些老版本開(kāi)發(fā)的應(yīng)用程序,依然可以使用老版本的開(kāi)發(fā)環(huán)境進(jìn)行打開(kāi)。

在安裝了Visual Web Developer Express之后,會(huì)在計(jì)算機(jī)上安裝.NET Framework 4.0版,所以版本的.NET Framework都放在操作系統(tǒng)安裝盤(pán)的windows文件夾下,在筆者的電腦中位于C:\windows\microsoft.net\Framework文件夾中,如果安裝了多個(gè)版本的.NET框架,可以看到每個(gè)框架都會(huì)存放在各自的版本號(hào)命名的文件夾中。Visual Studio及Visual Web Developer Express均具有多目標(biāo)支持的特性,因此可以開(kāi)發(fā)任何版本的ASP.NET應(yīng)用程序,可以從項(xiàng)目的屬性頁(yè)的目標(biāo)框架中查看當(dāng)前程序所在的目標(biāo)版本,如圖1.10所示。

圖1.9 下載安裝ASP.NET開(kāi)發(fā)環(huán)境

圖1.10 ASP.NET應(yīng)用程序的目標(biāo)框架

1.2.2 理解Web網(wǎng)站與Web應(yīng)用程序的差異

在Visual Studio 2010中提供Web網(wǎng)站和Web項(xiàng)目?jī)煞N類(lèi)型的創(chuàng)建ASP.NET應(yīng)用程序的方式,很多初學(xué)者不了解這兩者的差異,甚至很多從業(yè)者也不太清楚微軟為什么提供了兩種創(chuàng)建方式。用戶(hù)可以選擇Visual Studio 2010的主菜單中的“文件|新建|項(xiàng)目”菜單項(xiàng),在已安裝的模板中可以看到Web項(xiàng)目模板,如圖1.11所示。

圖1.11 Web網(wǎng)站項(xiàng)目

1.Web 應(yīng)用程序項(xiàng)目和網(wǎng)站項(xiàng)目的區(qū)別

如果選擇主菜單上的“文件|新建|網(wǎng)站”菜單項(xiàng),會(huì)看到與這些應(yīng)用程序?qū)?yīng)的網(wǎng)站項(xiàng)目。這兩者最大的區(qū)別可能在于Web應(yīng)用程序會(huì)為網(wǎng)站創(chuàng)建一個(gè)Visual Studio項(xiàng)目文件(.csproj 或 .vbproj),而Web網(wǎng)站則沒(méi)有,會(huì)用一個(gè)隱藏的解決方案資源管理文件,這個(gè)文件通常位于用戶(hù)文件夾下的\Documents\Visual Studio 2010\Project\網(wǎng)站名稱(chēng)下面,如創(chuàng)建了一個(gè)SimpleSite的網(wǎng)站,將會(huì)在文件夾下產(chǎn)生兩個(gè)文件SampleSite.sln和SampleSite.suo。

除了項(xiàng)目文件結(jié)構(gòu)不同之外,在編譯、命名空間與部署上都有較大的區(qū)別,如表1.1所示。

表1.1 Web網(wǎng)站與Web項(xiàng)目的主要差異

由于Web應(yīng)用程序項(xiàng)目會(huì)在開(kāi)發(fā)計(jì)算機(jī)上顯式編譯并生成一個(gè)程序集,因此一旦修改了程序,需要進(jìn)行重新編譯,而ASP.NET網(wǎng)站項(xiàng)目只在用戶(hù)第一次請(qǐng)求時(shí)進(jìn)行自動(dòng)編譯,因此無(wú)須重新再編譯。在使用Web應(yīng)用程序項(xiàng)目新建文件時(shí),會(huì)看到對(duì)應(yīng)窗體和母版頁(yè)總是會(huì)伴隨一個(gè)Designer文件,而網(wǎng)站則不包含,如圖1.12所示。

圖1.12 包含Designer文件的Web應(yīng)用程序項(xiàng)目

由于Web應(yīng)用程序項(xiàng)目會(huì)自動(dòng)為每個(gè)文件添加命名空間,因此在編譯后將會(huì)生成多個(gè)程序集,而Web網(wǎng)站項(xiàng)目由于不存在命令空間,會(huì)自動(dòng)產(chǎn)生一個(gè)程序集。Web應(yīng)用程序有重新生成和發(fā)布兩項(xiàng),可以作為類(lèi)庫(kù)被引用,Web網(wǎng)站只有一個(gè)發(fā)布網(wǎng)站項(xiàng),也不可以作為類(lèi)庫(kù)被引用。Web應(yīng)用程序ASP.NET文件夾中不包括bin、App_Code,Web網(wǎng)站可以添加ASP.NET文件夾,包括bin、App_Code,Web應(yīng)用程序可以添加組件和類(lèi),Web網(wǎng)站則沒(méi)有。

在部署時(shí),Web應(yīng)用程序可以不用部署源代碼,只需要部署程序集文件即可,但是需要進(jìn)行一些設(shè)置,對(duì)于網(wǎng)站項(xiàng)目的話(huà),可以直接以復(fù)制粘貼的形式來(lái)進(jìn)行,Web網(wǎng)站比Web項(xiàng)目易于部署。

2.如何選擇Web網(wǎng)站或者是Web應(yīng)用程序

如何選擇Web網(wǎng)站或者Web應(yīng)用程序,依據(jù)項(xiàng)目的規(guī)模和項(xiàng)目團(tuán)隊(duì)想要的控制方式,微軟提供了表1.2所示的選擇建議。

表1.2 選擇使用Web網(wǎng)站還是Web應(yīng)用程序建議

建議:如果是一個(gè)企業(yè)的網(wǎng)站項(xiàng)目,則選擇Web網(wǎng)站優(yōu)先,如果是一個(gè)使用ASP.NET的應(yīng)用程序,比如生產(chǎn)管理系統(tǒng)之類(lèi)的應(yīng)用系統(tǒng),則優(yōu)先考慮Web應(yīng)用程序項(xiàng)目。

1.2.3 開(kāi)發(fā)第一個(gè)ASP.NET應(yīng)用程序

為了讓第一個(gè)示例程序保持盡可能的簡(jiǎn)單,但是又能基本了解整個(gè)ASP.NET的開(kāi)發(fā)流程,在這個(gè)示例中將開(kāi)發(fā)一個(gè)顯示服務(wù)器端時(shí)間的簡(jiǎn)單用戶(hù)程序,整個(gè)開(kāi)發(fā)的步驟如下所示。

打開(kāi)Visual Studio開(kāi)發(fā)環(huán)境,從主菜單中選擇“文件|新建|網(wǎng)站”菜單項(xiàng),將彈出圖1.13所示的“新建網(wǎng)站”對(duì)話(huà)框。

圖1.13 “新建網(wǎng)站”對(duì)話(huà)框

在已安裝的模板中選擇Visual C#語(yǔ)言,中間的模板欄中列出了當(dāng)前可供開(kāi)發(fā)的ASP.NET網(wǎng)站類(lèi)型的模板。

● ASP.NET網(wǎng)站:創(chuàng)建一個(gè)全功能的ASP.NET Web站點(diǎn),Visual Studio 2010將創(chuàng)建基本的站點(diǎn)結(jié)構(gòu),包括用來(lái)定義站點(diǎn)全局外觀的母版頁(yè),以及兩個(gè)用來(lái)顯示網(wǎng)頁(yè)頁(yè)面的Web頁(yè),分別是default.aspx和about.aspx,也包含了一個(gè)Account文件夾,實(shí)現(xiàn)了基本的注冊(cè)、登錄和密碼變更功能。

● ASP.NET空網(wǎng)站:一個(gè)空白的Web網(wǎng)站結(jié)構(gòu),除了一個(gè)簡(jiǎn)單的Web.config配置文件之外什么都沒(méi)有提供,這對(duì)于需要開(kāi)啟一個(gè)全新的網(wǎng)站來(lái)說(shuō)是很有用的。

● ASP.NET Dynamic Data類(lèi)型的網(wǎng)站:在模板列表中可以看到有兩種類(lèi)型,一種是實(shí)體網(wǎng)站,一種是Linq to SQL網(wǎng)站,這兩種類(lèi)型僅在訪問(wèn)數(shù)據(jù)庫(kù)方面不同。用于提供動(dòng)態(tài)數(shù)據(jù)類(lèi)型的網(wǎng)站架構(gòu)。

● WCF 服務(wù):該模板創(chuàng)建了一個(gè)WCF服務(wù),包含服務(wù)器端的方法使得遠(yuǎn)程客戶(hù)端可以用來(lái)調(diào)用。

● ASP.NET Report網(wǎng)站:有兩種類(lèi)型的模板,一種是微軟自己的ReportView控件和SQL Server Reporting Services類(lèi)型的用來(lái)顯示報(bào)表的網(wǎng)站;另一種是ASP.NET Crystal Report網(wǎng)站,提供了類(lèi)似的服務(wù),不過(guò)使用來(lái)自Crystal Report組件。

注意:Visual Studio中無(wú)論選擇哪種模板,都會(huì)使用相同的方式編譯且執(zhí)行,這些模板的不同之處在于Visual Studio默認(rèn)為用戶(hù)創(chuàng)建的文件。

為Web站點(diǎn)選擇一個(gè)位置,這個(gè)位置是Web網(wǎng)站將要存儲(chǔ)的地方,多數(shù)開(kāi)發(fā)者會(huì)選擇默認(rèn)的文件系統(tǒng),使用Visual Studio 2010內(nèi)置的Web服務(wù)器來(lái)開(kāi)發(fā)與調(diào)試網(wǎng)站,可以單擊“瀏覽”按鈕,從彈出的對(duì)話(huà)框中選擇一個(gè)文件位置,如圖1.14所示。在指定了要?jiǎng)?chuàng)建的網(wǎng)站的位置后,單擊“確定”按鈕,Visual Studio將在解決方案資源管理器中列出當(dāng)前網(wǎng)站中已經(jīng)創(chuàng)建的文件,此時(shí)可以直接單擊工具欄中的“調(diào)試”按鈕,或者按【F5】鍵,查看一下默認(rèn)的網(wǎng)站模板效果。

當(dāng)開(kāi)始運(yùn)行ASP.NET網(wǎng)站時(shí),首次運(yùn)行會(huì)彈出一個(gè)窗口詢(xún)問(wèn)用戶(hù)是否要在Web網(wǎng)站中包含調(diào)試信息,如圖1.15所示。

這個(gè)窗口將改變Web.config中的配置項(xiàng),以便在應(yīng)用程序開(kāi)發(fā)過(guò)程中包含調(diào)試信息,在網(wǎng)站發(fā)布時(shí),可以通過(guò)在Web.config關(guān)閉調(diào)試項(xiàng)來(lái)發(fā)布網(wǎng)站,單擊“確定”按鈕后,將看到由Visual Studio產(chǎn)生的默認(rèn)網(wǎng)站,如圖1.16所示。

圖1.14 指定Web網(wǎng)站的存放位置

圖1.15 調(diào)試詢(xún)問(wèn)窗口

圖1.16 ASP.NET默認(rèn)網(wǎng)站模板

這個(gè)默認(rèn)的網(wǎng)站模板的標(biāo)題、菜單及網(wǎng)頁(yè)引用的CSS樣式表文件都定義在Site.master母版頁(yè)中,在解決方案資源管理器中,雙擊Site.master打開(kāi)母版頁(yè),Visual Studio提供了3種方式來(lái)查看或編輯一個(gè)Web頁(yè)面或母版頁(yè)。

● 設(shè)計(jì)視圖:可以以所見(jiàn)即所得的方式查看或設(shè)計(jì)頁(yè)面的最終呈現(xiàn)效果。

● 源代碼視圖:可以見(jiàn)到頁(yè)面的標(biāo)簽聲明代碼,可以直接從工具面板中拖動(dòng)控件到源代碼視圖,將自動(dòng)產(chǎn)生相應(yīng)的生成代碼,如HTML或者ASP.NET服務(wù)器控件的聲明。

● 拆分視圖:提供了源代碼視圖與設(shè)計(jì)視圖的同步顯示示,如在源代碼視圖中編輯了代碼之后,就可以在設(shè)計(jì)視圖中看到最終的效果。

可以在設(shè)計(jì)窗口的底部單擊不同的按鈕來(lái)切換到不同的視圖,如圖1.17所示。

圖1.17 視圖拆分窗口

為了簡(jiǎn)單起見(jiàn),將母版頁(yè)中的標(biāo)題更改為“第一個(gè)ASP.NET應(yīng)用程序”,然后在菜單欄中添加一個(gè)菜單項(xiàng)。

導(dǎo)航菜單是一個(gè)ASP.NET服務(wù)器控件,Visual Studio提供了強(qiáng)大的設(shè)計(jì)時(shí)的編輯功能,只要選中菜單項(xiàng),Visual Studio會(huì)顯示“智能標(biāo)簽”按鈕,單擊該按鈕,從彈出的菜單中選擇“編輯菜單項(xiàng)”,Visual Studio將會(huì)彈出圖1.18所示的編輯窗口。

在該窗口中添加了一個(gè)名為“顯示日期”的菜單項(xiàng),指定路徑為網(wǎng)站根目錄下的ShowDate.aspx,使用了表示網(wǎng)站根目錄的~符號(hào)。ShowDate.aspx現(xiàn)在還不存在,將在下面的步驟中進(jìn)行創(chuàng)建。

為了向Web站點(diǎn)添加一個(gè)頁(yè)面,在解決方案中用鼠標(biāo)右鍵單擊網(wǎng)站項(xiàng)目,從彈出的快捷菜單中選擇“添加新項(xiàng)”菜單項(xiàng),Visual Studio將彈出“添加新項(xiàng)”窗口,如圖1.19所示。

可以在該窗口中選擇可以添加到Web網(wǎng)站中的多種類(lèi)型的文件,如網(wǎng)站圖片文件、普通的HTML文件、類(lèi)文件、CSS樣式表文件、數(shù)據(jù)文件、配置文件等,最常被使用的就是Web窗體類(lèi)型的文件,為該文件命名為ShowDate.aspx,在右下角提供了以下兩個(gè)新建文件選項(xiàng)。

● 將代碼放在單獨(dú)的文件中:Visual Studio將創(chuàng)建兩個(gè)文件,一個(gè)是設(shè)計(jì)用的窗體文件,一個(gè)是用來(lái)放置頁(yè)面交互C#程序代碼的代碼后置文件,否則Visual Studio將只創(chuàng)建單個(gè)文件來(lái)存放標(biāo)記與代碼。

● 選擇母版頁(yè):將彈出一個(gè)“選擇母版頁(yè)”窗口,在該窗口中可以指定用來(lái)統(tǒng)一網(wǎng)站風(fēng)格的母版頁(yè)。

在示例中選中這兩個(gè)選項(xiàng),Visual Studio將彈出圖1.20所示的“選擇母版頁(yè)”窗口,選中“Site.master”母版頁(yè),單擊“確定”按鈕添加這個(gè)Web窗體到網(wǎng)站項(xiàng)目中。Visual Studio將產(chǎn)生一個(gè)Web窗體頁(yè)面,應(yīng)用母版頁(yè)之后,可以在設(shè)計(jì)視圖中看到,母版頁(yè)定義的區(qū)域是不能編輯的,只有母版頁(yè)內(nèi)容區(qū)域可以添加ASP.NET頁(yè)面內(nèi)容。

從Visual Studio工具箱中拖一個(gè)TextBox控件和一個(gè)Button控件,放到窗體的內(nèi)容區(qū)域。如果工具箱不可見(jiàn),可以選擇主菜單中的“視圖|工具箱”菜單項(xiàng)調(diào)出工具箱。找到屬性面板,為T(mén)extBox控件指定ID為txtDate,為Button控件指定ID為btnShow,指定其顯示文本的Text屬性為“顯示日期”,設(shè)計(jì)視圖如圖1.21所示。

在為用戶(hù)界面添加好控件后,接下來(lái)開(kāi)始編寫(xiě)程序代碼,這與傳統(tǒng)的Windows Forms編程方法非常相似,雙擊Button控件,Visual Studio將自動(dòng)切換到后置代碼視圖,Visual Studio同時(shí)生成按鈕的單擊事件處理代碼框架,在花括號(hào)之間直接輸入程序代碼即可,為了在TextBox控件中顯示當(dāng)前的日期,編寫(xiě)了如下的代碼:

protected void btnShow_Click(object sender, EventArgs e)
{
   txtDate.Text = DateTime.Now.ToShortDateString(); //顯示當(dāng)前日期
}

現(xiàn)在第一個(gè)ASP.NET應(yīng)用程序已經(jīng)編寫(xiě)完成,可以按【F5】鍵運(yùn)行這個(gè)網(wǎng)站,基于選擇的默認(rèn)瀏覽器類(lèi)型,Visual Studio將自動(dòng)打開(kāi)瀏覽器,此時(shí)在Default.aspx中多了一個(gè)項(xiàng)“顯示日期”,單擊該項(xiàng),將進(jìn)入到新建的ShowDate.aspx頁(yè)面,如圖1.22所示。單擊“顯示日期”按鈕后,瀏覽器經(jīng)過(guò)一個(gè)短暫的刷新后,會(huì)在TextBox控件中顯示出當(dāng)前的日期。

圖1.18 “菜單項(xiàng)編輯器”窗口

圖1.19 “添加新項(xiàng)”窗口

圖1.20 選擇要應(yīng)用的母版頁(yè)

圖1.21 使用工具箱和屬性添加和設(shè)置控件

圖1.22 ShowDate.aspx運(yùn)行效果

1.2.4 開(kāi)發(fā)第一個(gè)ASP.NET MVC應(yīng)用程序

ASP.NET MVC框架是微軟推出的用來(lái)構(gòu)建ASP.NET的最新的一個(gè)框架,這種基于模式的Web開(kāi)發(fā)方式提供了不一樣的開(kāi)發(fā)體驗(yàn),現(xiàn)在本節(jié)將帶領(lǐng)讀者開(kāi)發(fā)一個(gè)顯示當(dāng)前日期的ASP.NET MVC應(yīng)用程序,步驟如下所示。

打開(kāi)Visual Studio,選擇“文件|新建|項(xiàng)目”菜單項(xiàng),從彈出的“新建項(xiàng)目”窗口中選擇“ASP.NET MVC 2 Web應(yīng)用程序”,如圖1.23所示。

指定應(yīng)用程序名稱(chēng)為FiratASPNETMVC,單擊“確定”按鈕后,Visual Studio會(huì)彈出一個(gè)窗口,詢(xún)問(wèn)程序員是否要為MVC應(yīng)用程序創(chuàng)建一個(gè)測(cè)試項(xiàng)目,如圖1.24所示。

圖1.23 新建ASP.NET MVC項(xiàng)目

圖1.24 創(chuàng)建單元測(cè)試項(xiàng)目

將單元測(cè)試整合到ASP.NET MVC項(xiàng)目中也是因?yàn)榛谀J降募軜?gòu)提供了良好的可測(cè)試性,為了簡(jiǎn)化第一個(gè)示例應(yīng)用程序的創(chuàng)建,選擇“否,不創(chuàng)建單元測(cè)試項(xiàng)目”選項(xiàng),單擊“確定”按鈕,Visual Studio將產(chǎn)生一個(gè)ASP.NET MVC的文件夾結(jié)構(gòu),如圖1.25所示。

圖1.25 ASP.NET MVC文件夾結(jié)構(gòu)

Visual Studio 2010生成的這些MVC文件夾類(lèi)型都具有各自的含義與功能,ASP.NET MVC依賴(lài)于這些文件夾的結(jié)構(gòu)來(lái)進(jìn)行頁(yè)面的生成,這些文件夾的作用如下。

● App_Data文件夾:包含數(shù)據(jù)庫(kù)文件,如一個(gè)SQL Server Express數(shù)據(jù)庫(kù)文件。

● Content文件夾:包含靜態(tài)內(nèi)容文件,如圖片或者樣式表文件。

● Controllers文件夾:包含ASP.NET MVC的控制器類(lèi)。

● Models文件夾:包含ASP.NET MVC模型類(lèi)。

● Scripts文件夾:包含JavaScript文件,包括ASP.NET AJAX庫(kù)及jQuery庫(kù)。

● Views文件夾:包含ASP.NET MVC的視圖文件。

注意:這些文件夾是ASP.NET MVC的配置約定,因此程序員必須將相應(yīng)的文件放在各自不同的文件夾中,如JavaScript腳本應(yīng)該放在Scripts文件夾中。MVC的視圖僅放在Views文件夾中等,依照這樣的慣例使得程序更易維護(hù)和理解。

在ASP.NET中,用戶(hù)對(duì)于Web頁(yè)面的請(qǐng)求將不再是一個(gè)具體的.aspx的頁(yè)面,每個(gè)請(qǐng)求經(jīng)由URL路由交給控制器,控制器只是一個(gè)從System.Web.Mvc.Controller派生的類(lèi),而控制器中的行為將為具體的請(qǐng)求返回視圖內(nèi)容。行為就是一個(gè)用來(lái)處理特定請(qǐng)求的方法,這個(gè)方法可以具有一個(gè)或多個(gè)參數(shù),或者沒(méi)有參數(shù)。

舉個(gè)例子,當(dāng)直接運(yùn)行網(wǎng)頁(yè)時(shí),默認(rèn)將請(qǐng)求HomeController這個(gè)控制器中的Index行為,之所以有這樣的路徑是因?yàn)樵趃lobal.asax中指定了Default路由,如代碼1.4所示。

代碼1.4 global.asax中的RegisterRoutes方法

public static void RegisterRoutes(RouteCollection routes)
{
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
   //映射路由并指定路由的默認(rèn)值
   routes.MapRoute(
      "Default",            //路由名稱(chēng)
      "{controller}/{action}/{id}",     //帶有參數(shù)的 URL
      new { controller = "Home", action = "Index",
         id = UrlParameter.Optional } //參數(shù)默認(rèn)值
   );
}

在默認(rèn)的參數(shù)中指定controller為Home,ASP.NET MVC中的約定是每個(gè)控制器以Controller結(jié)尾,因此在Controller文件夾中會(huì)存在一個(gè)HomeController。在MapRoute中指定action,即行為是Index,那么在Controller中將會(huì)存在一個(gè)Index方法。

在了解了ASP.NET MVC的基本運(yùn)行原理后,現(xiàn)在打開(kāi)Controller文件夾中的HomeController.cs控制器文件。將看到一個(gè)Index的公共方法,該方法在為視圖數(shù)據(jù)字典賦了一個(gè)歡迎信息,并返回一個(gè)ViewResult類(lèi)型的對(duì)象給視圖。下面修改這個(gè)方法,為視圖數(shù)據(jù)字典添加一個(gè)顯示當(dāng)前時(shí)間的新項(xiàng),如代碼1.5所示。

代碼1.5 HomeController控制器中的Index方法

public ActionResult Index()                //控制器行為
{
  ViewData["Message"] = "歡迎使用 ASP.NET MVC!";  //顯示歡迎消息
  ViewData["CurrDateTime"] = DateTime.Now.ToShortDateString();//顯示當(dāng)前時(shí)間
  return View();                    //返回ResultView視圖
}

ASP.NET MVC約定,每個(gè)控制器都有一個(gè)對(duì)應(yīng)的在Views中的文件夾,每個(gè)行為方法都有一個(gè)對(duì)應(yīng)的文件,因此可以在路徑Views\Home\中找到Index.aspx文件,切換到源代碼視圖,在系統(tǒng)生成的代碼下面添加一個(gè)顯示視圖數(shù)據(jù)字典中的CurrdateTime關(guān)鍵字的當(dāng)前時(shí)間,代碼如下:

<h2>當(dāng)前時(shí)間是:<%: ViewData["CurrDateTime"] %></h2>

注意:ViewData用于在視圖和控制器之間傳遞數(shù)據(jù),使用這個(gè)字典可以保存任何類(lèi)型的對(duì)象。

雖然對(duì)于ASP.NET MVC的介紹非常有限,但是現(xiàn)在讀者也經(jīng)歷了MVC的開(kāi)發(fā)流程,示例的運(yùn)行效果如圖1.26所示。

圖1.26 示例運(yùn)行效果

模型用來(lái)提供數(shù)據(jù)或者應(yīng)用邏輯,控制器用來(lái)向視圖提供數(shù)據(jù),這樣的分層模型便于應(yīng)用系統(tǒng)的擴(kuò)展和維護(hù),也便于加入單元測(cè)試功能,在本書(shū)后面的內(nèi)容中,將會(huì)以一些ASP.NET MVC實(shí)例的形式來(lái)介紹如何開(kāi)發(fā)MVC類(lèi)型的Web應(yīng)用程序。

主站蜘蛛池模板: 天气| 贵州省| 信丰县| 新源县| 印江| 龙井市| 大田县| 宁陕县| 衡水市| 鹿泉市| 江油市| 阳西县| 马山县| 汉寿县| 乌恰县| 东乡| 万年县| 建平县| 南安市| 石城县| 许昌市| 曲松县| 高淳县| 太康县| 栾城县| 泸水县| 盘山县| 万载县| 安陆市| 铜川市| 沙河市| 肥西县| 蓬莱市| 临朐县| 凯里市| 太白县| 铜川市| 西贡区| 汾西县| 任丘市| 新河县|