快速入門學(xué)習(xí)ASPMVC中文教程_第1頁(yè)
快速入門學(xué)習(xí)ASPMVC中文教程_第2頁(yè)
快速入門學(xué)習(xí)ASPMVC中文教程_第3頁(yè)
快速入門學(xué)習(xí)ASPMVC中文教程_第4頁(yè)
快速入門學(xué)習(xí)ASPMVC中文教程_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、ASP.NET MVC3 快速入門-第一節(jié) 概述  (2011-02-23 20:57:18)轉(zhuǎn)載標(biāo)簽: web應(yīng)用程序分類: ASP.NETMVC31.1  本教程的學(xué)習(xí)內(nèi)容    在本教程中,你將學(xué)會(huì)如下內(nèi)容:· 如何創(chuàng)建一個(gè)ASP.NET MVC的工程。· 如何創(chuàng)建ASP.NET MVC的控制器(controller)與視圖(view)。· 如何使用Entity Framework code-first 范例來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。·

2、; 如何獲取和顯示數(shù)據(jù)。· 如何編輯數(shù)據(jù)并且進(jìn)行數(shù)據(jù)的有效性驗(yàn)證。 1.2   創(chuàng)建工程    如果要?jiǎng)?chuàng)建一個(gè)ASP.NET MVC3的工程時(shí),首先運(yùn)行Visual Web Developer 2010 Express(本教程中簡(jiǎn)稱“Visual Web Developer”),并且在起始頁(yè)(start page)中選擇“新建項(xiàng)目”。Visual Web Developer是一個(gè)集成開(kāi)發(fā)環(huán)境,你可以使用它來(lái)進(jìn)行各種應(yīng)用程序的開(kāi)發(fā)。在Visual Web Developer的菜單的下面有一個(gè)工具條,可以直接

3、點(diǎn)擊工具條中的各個(gè)工具按鈕來(lái)進(jìn)行各種操作,也可以直接點(diǎn)擊菜單中的各個(gè)菜單項(xiàng)來(lái)進(jìn)行各種操作,此處我們點(diǎn)擊“文件”菜單中的“新建項(xiàng)目”菜單項(xiàng)。圖1-1 Visual Web Developer 2010 Express中的起始頁(yè)  1.3   創(chuàng)建你的第一個(gè)應(yīng)用程序     你可以使用Visual Basic 或Visual C#作為開(kāi)發(fā)語(yǔ)言來(lái)創(chuàng)建應(yīng)用程序。在本教程中,選擇C#來(lái)作為開(kāi)發(fā)語(yǔ)言。點(diǎn)擊“新建項(xiàng)目”菜單項(xiàng)后,在打開(kāi)的“新建項(xiàng)目”對(duì)話框中,雙擊左邊的“Visual C#”使其成為展

4、開(kāi)狀態(tài),然后點(diǎn)擊“Web”,點(diǎn)擊右邊的“ASP.NET MVC 3 Web 應(yīng)用程序”,然后在下方的名稱文本框中填入應(yīng)用程序的名稱,在本教程中命名為“MvcMovie”,然后點(diǎn)擊確定按鈕。 圖1-2 在新建項(xiàng)目對(duì)話框中選擇ASP.NET MVC3應(yīng)用程序并為應(yīng)用程序命名     在接下來(lái)打開(kāi)的“新ASP.NET MVC 3 項(xiàng)目”對(duì)話框中,點(diǎn)擊選中“Internet 應(yīng)用程序”,在“視圖引擎”下拉框中保持默認(rèn)的“Razor”選項(xiàng)不作修改(Razor視圖是ASP.NET MVC3種新增的一種十分重要的視圖類型,使用它可以使得W

5、eb應(yīng)用程序的開(kāi)發(fā)變得更加方便快捷,在后文中將對(duì)此進(jìn)行詳細(xì)介紹)。圖1-3 選擇項(xiàng)目模板與視圖引擎     點(diǎn)擊確定按鈕,Visual Web Developer會(huì)為你所創(chuàng)建的ASP.NET MVC項(xiàng)目提供一個(gè)默認(rèn)模板,這樣的話你就擁有了一個(gè)可以立刻運(yùn)行的應(yīng)用程序。默認(rèn)的模板中提供的是一個(gè)很簡(jiǎn)單的顯示“歡迎使用 ASP.NET MVC!”文字的應(yīng)用程序,你可以以此作為你的開(kāi)發(fā)起點(diǎn)。圖1-4 Visual Web Developer提供了一個(gè)默認(rèn)的應(yīng)用程序模板    點(diǎn)擊“調(diào)試”菜單中的

6、“啟動(dòng)調(diào)試”菜單項(xiàng)(該菜單項(xiàng)的快捷鍵為F5),Visual Web Developer將啟動(dòng)一個(gè)內(nèi)置的服務(wù)器,并且在該服務(wù)器中打開(kāi)當(dāng)前Web應(yīng)用程序的主頁(yè),如圖1-5所示。圖1-5 ASP.NET MVC3的默認(rèn)應(yīng)用程序模板的調(diào)試畫面     請(qǐng)注意該頁(yè)面在瀏覽器中的地址為“http:/localhost:4423/”。其中“l(fā)ocalhost”代表了本機(jī)上你剛剛創(chuàng)建的Web應(yīng)用程序的臨時(shí)網(wǎng)站地址,4423代表了Visual Web Developer使用的一個(gè)隨機(jī)端口,每次調(diào)試的時(shí)候,Visual Web Developer都會(huì)使用這個(gè)端口來(lái)

7、作為內(nèi)置服務(wù)器的端口號(hào)。在各計(jì)算機(jī)上,該端口號(hào)都是不相同的,因?yàn)樵摱丝谔?hào)是Visual Web Developer隨機(jī)選擇的。    在這個(gè)模板應(yīng)用程序的頁(yè)面的右上角,提供了兩個(gè)按鈕與一個(gè)“登錄”鏈接,點(diǎn)擊“登錄”鏈接,頁(yè)面跳轉(zhuǎn)到登錄頁(yè)面,點(diǎn)擊“主頁(yè)”按鈕,頁(yè)面返回到主頁(yè),點(diǎn)擊“關(guān)于”按鈕,頁(yè)面跳轉(zhuǎn)到“關(guān)于”頁(yè)面。    接下來(lái),讓我們開(kāi)始逐步將這個(gè)默認(rèn)的應(yīng)用程序修改為我們所要的應(yīng)用程序,在這個(gè)過(guò)程中逐步了解ASP.NET MVC 3的有關(guān)知識(shí)。首先,讓我們關(guān)閉瀏覽器并開(kāi)始代碼的修改工作。ASP.NET 

8、MVC3 快速入門-第二節(jié) 添加一個(gè)控制器  (2011-02-24 19:39:57)轉(zhuǎn)載標(biāo)簽: 控制器 雜談分類: ASP.NETMVC3    MVC的全稱為model-view-controller(模型-視圖-控制器)。MVC是一種開(kāi)發(fā)應(yīng)用程序的模式,這個(gè)模式已經(jīng)具有了很好的框架架構(gòu),并且十分容易維護(hù)。使用MVC開(kāi)發(fā)出來(lái)的應(yīng)用程序一般包括以下幾塊內(nèi)容:· 控制器(Controller):控制器類處理客戶端向Web應(yīng)用程序發(fā)出的請(qǐng)求,獲取數(shù)據(jù),并指定返回給客戶端,用來(lái)顯示處理結(jié)

9、果的視圖。· 模型(Model):模型類代表了應(yīng)用程序的數(shù)據(jù),這些數(shù)據(jù)通常具有一個(gè)數(shù)據(jù)驗(yàn)證邏輯,用來(lái)使得這些數(shù)據(jù)必須符合業(yè)務(wù)邏輯。· 視圖(View):視圖類是Web應(yīng)用程序中用來(lái)生成并顯示HTML格式的服務(wù)器端對(duì)客戶端請(qǐng)求的響應(yīng)結(jié)果的模板文件。在本教程中,將全面介紹這些概念,并且向你展示如何利用它們來(lái)搭建一個(gè)應(yīng)用程序。    首先,讓我們來(lái)創(chuàng)建一個(gè)控制器(controller)類。在解決方案資源管理器中,鼠標(biāo)右擊Controllers文件夾,并且點(diǎn)擊添加-控制器,如圖2-1所示。圖2-1 添加控制器   

10、; 在彈出的“添加控制器”對(duì)話框中,將控制器命名為“HelloWorldController”,然后點(diǎn)擊添加按鈕,如圖2-2所示。圖2-2 命名控制器    觀察解決方案資源管理器中新增加了一個(gè)文件,名字為HelloWorldController.cs,并且該文件呈打開(kāi)狀態(tài),如圖2-3所示。    修改打開(kāi)的HelloWorldController.cs文件,在HelloWorldController類中,創(chuàng)建如代碼清單2-1中所示的兩個(gè)方法,控制器將返回一個(gè)HTML格式的字符串。  

11、  代碼清單2-1 在控制器中創(chuàng)建方法public class HelloWorldController : Controller    /    / GET: /HelloWorld/     public string Index()            return "這是我的<b>默認(rèn)</b

12、>action."        /    / GET: /HelloWorld/Welcome/    public string WelCome()            return "這是我的Welcome方法."     &

13、#160;  在這個(gè)修改后的HelloWorldController控制器中,第一個(gè)方法名為Index。現(xiàn)在讓我們從瀏覽器中調(diào)用該方法。運(yùn)行應(yīng)用程序(按F5鍵或Ctrl+F5鍵),在打開(kāi)的瀏覽器中的地址欄后面,添加“HelloWorld”路徑(譬如,在我的計(jì)算機(jī)上,瀏覽器中地址為http:/localhost:4423/HelloWorld),畫面顯示如圖2-4所示。由于在Index方法中,直接返回了一個(gè)HTML格式的字符串,所以在瀏覽器中將該字符串顯示出來(lái)。 圖2-4 HelloWorldController控制器中Index方法的運(yùn)行結(jié)果在ASP.NET MV

14、C中,可以根據(jù)瀏覽器中的輸入地址來(lái)調(diào)用不同的控制器或控制七種不同的方法。ASP.NET MVC的默認(rèn)的映射邏輯使用如下所示的格式來(lái)決定應(yīng)該調(diào)用什么控制器或控制器中的什么方法。/Controller/ActionName/Parameters    URL地址的第一部分決定調(diào)用哪個(gè)控制器類,所以“/HelloWorld”映射到HelloWorldController控制器類。第二部分決定調(diào)用控制器中的哪個(gè)方法。所以“/HelloWorld/Index”將會(huì)調(diào)用HelloWorldController控制器類的Index方法。由于Index方法是控制器類的默

15、認(rèn)方法(可以另外指定控制器類的默認(rèn)方法),所以也可只輸入“/HelloWorld”來(lái)調(diào)用該方法。    在瀏覽器的地址欄中,輸入“http:/localhost:xxxx/HelloWorld/Welcome”,將會(huì)調(diào)用HelloWorldController控制器類的Welcome方法,該方法返回“這是我的Welcome方法.”文字,所以瀏覽器中顯示該文字,如圖2-5所示。圖2-5 HelloWorldController控制器中Welcome方法的運(yùn)行結(jié)果    接下來(lái),讓我們修改Welcome方法,以便在UR

16、L地址欄中可以傳遞一些參數(shù)給該方法(例如:/HelloWorld/Welcome?name=Scott&numtimes=4)。修改后的代碼如下所示。注意這里我們使用了C#的可選參數(shù),當(dāng)URL地址中沒(méi)有使用numtimes參數(shù)時(shí),該參數(shù)被默認(rèn)設(shè)定為1。public string Welcome(string name,int numTimes=1)    return HttpUtility.HtmlEncode("Hello " + name + ",NumTimes is:" + numTimes);&

17、#160;   運(yùn)行該應(yīng)用程序,在瀏覽器中輸入“http:/localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4”,運(yùn)行結(jié)果顯示如圖2-6所示。瀏覽器自動(dòng)將URL地址欄中的參數(shù)映射成Welcome方法中的傳入?yún)?shù)。圖2-6 在Welcome方法中使用參數(shù)    到現(xiàn)在為止,我們展示了MVC中的“VC”(視圖與控制器)部分的工作機(jī)制,控制器返回HTML字符串。很顯然大多數(shù)情況下你不想讓控制器直接返回HTML字符串,因?yàn)槟菢拥脑捑幋a起來(lái)就太麻煩了。所以我

18、們需要使用不同的視圖模板文件來(lái)幫助生成HTML格式的頁(yè)面文件,在下一節(jié)中讓我們來(lái)看一下如何在ASP.NET MVC3中使用視圖。ASP.NET MVC3 快速入門-第三節(jié) 添加一個(gè)視圖  (2011-02-26 18:58:25)轉(zhuǎn)載標(biāo)簽: 視圖 模板 應(yīng)用程序 控制器分類: ASP.NETMVC33.1  添加一個(gè)視圖    在本節(jié)中我們修改HelloWorldController類,以便使用視圖來(lái)向客戶端展示HTML格式的響應(yīng)結(jié)果。我們使用A

19、SP.NET MVC3中新增的Razor視圖引擎來(lái)創(chuàng)建視圖。Razor視圖模板文件的后綴名為.cshtml,它提供了一種簡(jiǎn)潔的方式來(lái)創(chuàng)建HTML輸出流。Razor視圖大大減少了在書(shū)寫視圖模板文件時(shí)所需要輸入的字符,提供了一個(gè)最快捷,最簡(jiǎn)便的編碼方式。    這里,我們?cè)贖elloWorldController類的Index方法中添加使用一個(gè)視圖。在修改前的Index方法中返回一個(gè)字符串,我們修改這個(gè)方法來(lái)使它返回一個(gè)視圖,代碼如下所示。public ActionResult Index()     

20、60;return View();    這段代碼表示Index方法使用一個(gè)視圖模板來(lái)在瀏覽器中生成HTML格式的頁(yè)面文件。接著,讓我們來(lái)添加一個(gè)Index方法所使用的視圖模板。在Index方法中點(diǎn)擊鼠標(biāo)右鍵,然后點(diǎn)擊“添加視圖”,將會(huì)彈出一個(gè)“添加視圖”對(duì)話框。 圖3-1 添加視圖圖3-2 添加視圖對(duì)話框    在該對(duì)話框中,不做任何修改,直接點(diǎn)擊添加按鈕,觀察解決方案資源管理器中,在MvcMovie項(xiàng)目下的Views文件夾下創(chuàng)建了一個(gè)HelloWorld文件夾,并且在該文件夾中創(chuàng)建了一個(gè)In

21、dex.cshtml文件,同時(shí)該文件呈打開(kāi)狀態(tài),如圖3-3所示。圖3-3 視圖模板文件被創(chuàng)建并呈打開(kāi)狀態(tài)    讓我們?cè)谠撐募凶芳右恍┪淖?,代碼如代碼清單3-1所示。    代碼清單3-1 Index.cshtml視圖模板文件    ViewBag.Title = "首頁(yè)"<h2>首頁(yè)</h2><p>這是我的第一個(gè)視圖模板</p>    運(yùn)行應(yīng)用程序,輸入地

22、址“http:/localhost:xxxx/HelloWorld”。由于在Index方法中并沒(méi)有做任何事情,只是簡(jiǎn)單地一行代碼“return View()”,該行代碼表示我們使用一個(gè)視圖模板文件來(lái)在瀏覽器中展示響應(yīng)結(jié)果。因?yàn)槲覀儾](méi)有顯式指定使用哪個(gè)視圖模板文件,所以使用了默認(rèn)的Views文件夾下的HelloWorld文件夾下的Index.cshtml視圖模板文件。該視圖模板文件中只有簡(jiǎn)單的兩行文字,在瀏覽器中的顯示結(jié)果如圖3-4所示。圖3-4 在瀏覽器中顯示視圖    看上去還不錯(cuò),但是請(qǐng)注意,該網(wǎng)頁(yè)的標(biāo)題為“首頁(yè)”,但是網(wǎng)頁(yè)中的大標(biāo)題文字

23、卻為“我的MVC應(yīng)用程序”,需要修改一下。3.2  修改視圖,修改應(yīng)用程序的頁(yè)面布局     首先,讓我們修改頁(yè)面大標(biāo)題中的“我的MVC應(yīng)用程序”文字。這段文字是所有頁(yè)面中的公共大標(biāo)題,在這個(gè)應(yīng)用程序中,雖然所有頁(yè)面中都顯示了這個(gè)共同的大標(biāo)題,但只有一處地方對(duì)其進(jìn)行了設(shè)置。打開(kāi)解決方案資源管理器中Views文件夾下的Shared文件夾下的_Layout.cshtml文件。該文件被稱為布局頁(yè)面,位于公有文件夾Shared下,被所有其他網(wǎng)頁(yè)所共用。圖3-5 公有布局頁(yè)面    &

24、#160;布局模板頁(yè)允許你統(tǒng)一在一個(gè)地方指定整個(gè)Web應(yīng)用程序或Web網(wǎng)站的所有HTML頁(yè)面的布局方法。請(qǐng)注意文件底部的“RenderBody()”代碼行。RenderBody()是一個(gè)占位符,代表了所有你創(chuàng)建出來(lái)的實(shí)際應(yīng)用的視圖頁(yè)面,在這里統(tǒng)一指定。將布局模板文件中的“我的 MVC 應(yīng)用程序”修改為“我的 MVCMovie 應(yīng)用程序”。代碼如下所示。<div id="title">    <h1>我的 MVCMovie 應(yīng)用程序</h1></div> &#

25、160;  運(yùn)行應(yīng)用程序,注意網(wǎng)頁(yè)中的大標(biāo)題被修改為“我的 MVCMovie 應(yīng)用程序”。點(diǎn)擊“關(guān)于”鏈接,你可以看見(jiàn)“關(guān)于”頁(yè)面中的大標(biāo)題也被修改為“我的 MVCMovie 應(yīng)用程序”。由此可以看出一旦修改了布局頁(yè)面中的某處地方,該修改將會(huì)被應(yīng)用到所有頁(yè)面中。圖3-6 在布局頁(yè)面中修改了網(wǎng)頁(yè)中顯示的大標(biāo)題    完整的_Layout.cshtml文件中的代碼如代碼清單3-2所示。    代碼清單3-2 _Layout.cshtml文件中的完整代碼<!DOCTYPE html><

26、;html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title>ViewBag.Title</title>    <link href="Url.Content("/Content/Site.css")" rel=

27、"stylesheet"type="text/css" />    <script src="Url.Content("/Scripts/jquery-.min.js")"type="text/javascript"></script></head><body>    <div class="page">  &#

28、160;     <div id="header">            <div id="title">                <h1>我的 MVCMovie 應(yīng)

29、用程序</h1>            </div>            <div id="logindisplay">               &

30、#160;Html.Partial("_LogOnPartial")            </div>            <div id="menucontainer">          

31、      <ul id="menu">                    <li>Html.ActionLink("主頁(yè)", "Index", "Home")</li>    &

32、#160;               <li>Html.ActionLink("關(guān)于", "About", "Home")</li>                </ul> 

33、60;          </div>        </div>        <div id="main">            RenderBody()&#

34、160;           <div id="footer">            </div>        </div>    </div></body><

35、/html>     現(xiàn)在,讓我們修改Index視圖頁(yè)面的標(biāo)題。    打開(kāi)Views文件夾下的HelloWorld文件夾下的Index.cshtml文件。這里我們修改兩處地方:首先,修改瀏覽器中的標(biāo)題,然后修改<h2>標(biāo)簽中的小標(biāo)題文字。修改后代碼如代碼清單3-3所示。    代碼清單3-3 修改后的Index.cshtml視圖模板文件    ViewBag.Title = "電影清單"

36、<h2>我的電影清單</h2><p>這是我的第一個(gè)視圖模板</p>    ViewBag對(duì)象的Title屬性代表了顯示該頁(yè)面時(shí)的瀏覽器中的標(biāo)題文字。讓我們回頭看一下布局模板文件,在該文件的<head>區(qū)段中的<title>標(biāo)簽中使用了這個(gè)值來(lái)作為瀏覽器中的網(wǎng)頁(yè)標(biāo)題。同時(shí),通過(guò)這種方法,你可以很容易地在你的視圖模板文件與布局模板文件之間進(jìn)行參數(shù)的傳遞。    運(yùn)行應(yīng)用程序,在地址欄中輸入“http:/localhost:xxxx/HelloWor

37、ld”,注意瀏覽器中的網(wǎng)頁(yè)標(biāo)題,頁(yè)面中的小標(biāo)題文字都變?yōu)樾薷暮蟮臉?biāo)題文字(如果沒(méi)有發(fā)生變化的話,則可能你的網(wǎng)頁(yè)被緩存住了,可以按Ctrl+F5鍵來(lái)在重新刷新頁(yè)面時(shí)取消緩存)。    同時(shí)也請(qǐng)注意_Layout.cshtml文件中的占位符中的內(nèi)容被替換成了Index.cshtml視圖模板中的內(nèi)容,所以瀏覽器中展示的是一個(gè)單一的HTML文件。瀏覽器中的運(yùn)行結(jié)果如圖3-7所示。圖3-7 修改了標(biāo)題后的Index視圖模板文件    此處,我們的數(shù)據(jù)(“這是我的第一個(gè)視圖模板”文字)是被直接書(shū)寫在文件中的,也就是說(shuō)我們使用到

38、了MVC應(yīng)用程序的“V”(視圖View)與“C”(控制器Controller)。接下來(lái),我們講解一下如何創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)并從該數(shù)據(jù)庫(kù)中獲取模型數(shù)據(jù)。3.3  將控制器中的數(shù)據(jù)傳遞給視圖    在我們使用數(shù)據(jù)庫(kù)并介紹模型之前,首先我們介紹一下如何將控制器中的信息傳遞給視圖。瀏覽器接收到一個(gè)URL請(qǐng)求后,將會(huì)調(diào)用控制器類來(lái)進(jìn)行響應(yīng)。你可以在控制器類中進(jìn)行對(duì)接收到的頁(yè)面參數(shù)進(jìn)行處理的代碼,你可以在控制器類中書(shū)寫從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的代碼,你也可以在控制器類中書(shū)寫代碼來(lái)決定返回給客戶端什么格式的響應(yīng)文件??刂破骺梢岳靡晥D模板文件來(lái)生成HTML格

39、式的響應(yīng)文件并顯示在瀏覽器中。    控制器類負(fù)責(zé)提供視圖模板文件在生成HTML格式的響應(yīng)文件時(shí)所需要的任何數(shù)據(jù)或?qū)ο?。一個(gè)視圖模板文件不應(yīng)該執(zhí)行任何業(yè)務(wù)邏輯,也不應(yīng)該直接和數(shù)據(jù)庫(kù)進(jìn)行交互。它只能和控制器類進(jìn)行交互,獲取控制器類所提供給它的數(shù)據(jù),這樣可以使你的代碼更加清晰,容易維護(hù)。    現(xiàn)在在我們的應(yīng)用程序中,HelloWorldController控制器類中的Welcome方法帶有兩個(gè)參數(shù)name與numTimes,Welcome方法直接向?yàn)g覽器輸出這兩個(gè)參數(shù)的參數(shù)值。這里,我們修改該方法使其不再直接輸出數(shù)據(jù)

40、,而是使用一個(gè)視圖模板。該視圖模板將生成一個(gè)動(dòng)態(tài)的響應(yīng)流,這意味著我們需要將數(shù)據(jù)從控制器類傳遞給視圖以便利用該數(shù)據(jù)來(lái)生成該響應(yīng)流。我們?cè)谠摽刂破黝愔袑⒁晥D模板所需要的數(shù)據(jù)送入一個(gè)ViewBag對(duì)象中,該對(duì)象可以被視圖模板直接接收。    打開(kāi)HelloWorldController.cs文件,修改Welcome方法,在該方法中為ViewBag對(duì)象添加一個(gè)Message屬性與NumTimes屬性,并且將屬性值分別設(shè)定為經(jīng)過(guò)處理后的name參數(shù)值與numTimes參數(shù)值。ViewBag對(duì)象是一個(gè)動(dòng)態(tài)對(duì)象,你可以為它添加任何屬性并賦上屬性值。在未賦值之前該屬性

41、是不生效的,直到你賦值為止。修改后的HelloWorldController.cs文件中的代碼如代碼清單3-4所示。    代碼清單3-4 修改后的HelloWorldController.cs文件using System.Web;using System.Web.Mvc;namespace MvcMovie.Controllers    public class HelloWorldController : Controller       &

42、#160;    /        / GET: /HelloWorld/        public ActionResult Index()                    return V

43、iew();                /        / GET: /HelloWorld/Welcome/        public ActionResult Welcome(string name, int numTimes = 1)  

44、0;                 ViewBag.Message = "Hello " + name;            ViewBag.NumTimes = numTimes;        

45、0;   return View();                現(xiàn)在ViewBag對(duì)象中已經(jīng)包含了數(shù)據(jù),它將被自動(dòng)傳遞給視圖。      接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)Welcome視圖模板。在“調(diào)試”菜單中,點(diǎn)擊“生成 MvcMovie”將應(yīng)用程序進(jìn)行編譯,如圖3-8所示。圖3-8 編譯應(yīng)用程序   

46、60;接下來(lái),在Welcome方法中點(diǎn)擊鼠標(biāo)右鍵,然后點(diǎn)擊“添加視圖”,彈出對(duì)話框如圖3-9所示。圖3-9 為Welcome方法添加視圖    在該對(duì)話框中不做任何修改,直接點(diǎn)擊添加按鈕, View文件夾下的HelloWorld文件假種自動(dòng)被創(chuàng)建了一個(gè)Welcome.cshtml文件,打開(kāi)該文件,在<h2>元素下添加代碼,讓瀏覽器顯示URL地址中傳入的name參數(shù)中設(shè)定的文字,顯示次數(shù)等于URL地址中傳入的numTimes參數(shù)中設(shè)定的次數(shù)。修改后的Welcome.cshtml文件中的代碼如代碼清單3-5所示。   

47、; 代碼清單3-5 修改后的Welcome.cshtml文件    ViewBag.Title = "Welcome"<h2>Welcome</h2><ul>for (int i = 0; i < ViewBag.NumTimes; i+)    <li>ViewBag.Message</li></ul>   運(yùn)行應(yīng)用程序,并且在地址欄中輸入“http:/localhost:xx

48、/HelloWorld/Welcome?name=Scott&numtimes=4”,該地址欄中的頁(yè)面參數(shù)將會(huì)自動(dòng)傳遞給控制器??刂破鲗?huì)把這些參數(shù)值放入ViewBag對(duì)象中并且傳遞給視圖。視圖再在瀏覽器中顯示這些數(shù)據(jù)。圖3-10 視圖中顯示從控制器類中傳遞過(guò)來(lái)的數(shù)據(jù)    這里,我們使用了模型“M”的一種方式,但是不是數(shù)據(jù)庫(kù)的方式。在下一節(jié)中,我們將創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),并且介紹如何對(duì)該數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行處理。ASP.NET MVC3 快速入門-第四節(jié) 添加一個(gè)模型  (2011-02-27 20:04:47)

49、轉(zhuǎn)載標(biāo)簽: 數(shù)據(jù)庫(kù) 對(duì)話框 雜談分類: ASP.NETMVC3    在本節(jié)中我們將追加一些類來(lái)管理數(shù)據(jù)庫(kù)中的電影。這些類將成為我們的MVC應(yīng)用程序中的“模型”部分。    我們將使用一個(gè).NET Framework的被稱之為“Entity Framework”的數(shù)據(jù)訪問(wèn)技術(shù)來(lái)定義這些模型類,并使用這些類來(lái)進(jìn)行操作。Entity Framework(通常被簡(jiǎn)稱為“EF”)支持一個(gè)被稱之為“code-first”的開(kāi)發(fā)范例。Code-first允許你通過(guò)書(shū)寫一些簡(jiǎn)單的類來(lái)創(chuàng)建模

50、型對(duì)象。你可以通過(guò)訪問(wèn)這些類的方式來(lái)訪問(wèn)數(shù)據(jù)庫(kù),這是一種非常方便快捷的開(kāi)發(fā)模式。4.1  利用NuGet來(lái)安裝EFCodeFirst    我們可以利用NuGet包管理器(安裝ASP.NET MVC3時(shí)會(huì)自動(dòng)安裝)來(lái)把EFCodeFirst類庫(kù)添加到我們的MvcMovie工程中。這個(gè)類庫(kù)使得我們可以直接使用code-first。點(diǎn)擊“工具”菜單下的“Library Package Manager”子菜單下的“Add Library Package Reference”菜單選項(xiàng),如圖4-1所示。圖4-1 使用NuGet包管理器 

51、;   點(diǎn)擊“Add Library Package Reference”菜單選項(xiàng)后,將會(huì)彈出一個(gè)對(duì)話框,標(biāo)題為“Add Library Package Reference”,如圖4-2所示。圖4-2 “Add Library Package Reference”對(duì)話框    默認(rèn)狀態(tài)下,左邊的“All”選項(xiàng)處于選擇狀態(tài)。因?yàn)檫€沒(méi)有安裝任何包,所以右邊面板中顯示“找不到任何項(xiàng)”。點(diǎn)擊左邊面板中的“online”選項(xiàng),NuGet包管理器將會(huì)在服務(wù)器上檢索所有當(dāng)前能夠獲取的包,如圖4-3所示。圖4-3 NuGet包管理

52、器正在檢索包信息    服務(wù)器上有幾百個(gè)當(dāng)前能夠獲取的包,現(xiàn)在我們只關(guān)注EFCodeFirst包。在右上角的搜索輸入框中輸入“EFCode”。在檢索結(jié)果中,選擇EFCodeFirst包,并且點(diǎn)擊Install按鈕安裝包,如圖4-4所示。圖4-4 選擇EFCodeFirst包并安裝    點(diǎn)擊了install按鈕后,會(huì)彈出一個(gè)接受許可證窗口,如圖4-5所示,在這個(gè)窗口中必須要點(diǎn)擊“I Accept”按鈕,接受許可證條款,安裝才能繼續(xù)進(jìn)行。圖4-5 接受許可證窗口    安裝完畢

53、后,點(diǎn)擊close按鈕。我們的MvcMovie工程中會(huì)自動(dòng)加載EntityFramework程序集,其中包含了EFCodeFirst類庫(kù)。圖4-6 安裝完畢后EntityFramework程序集被自動(dòng)加載4.2  添加模型類    在解決方案資源管理器中,鼠標(biāo)右擊Models文件夾,點(diǎn)擊“添加”菜單下的“類”,如圖4-7所示。圖4-7 添加模型類    點(diǎn)擊“類”菜單項(xiàng)后,會(huì)彈出“添加新項(xiàng)”對(duì)話框,在該對(duì)話框中將類名命名為“Movie”,如圖4-8所示。圖4-8 在“添加新項(xiàng)”對(duì)話框中

54、為類命名    然后點(diǎn)擊添加按鈕,觀察解決方案資源管理器中,Models文件夾下添加了一個(gè)Movie.cs類定義文件,并且該文件呈打開(kāi)狀態(tài),如圖4-9所示。圖4-9 Movie.cs類定義文件已被添加并呈打開(kāi)狀態(tài)    在Movie.cs文件中追加如下所示的五個(gè)屬性。public class Moviepublic int ID get; set;         public string Title get; set;  

55、       public DateTime ReleaseDate get; set;         public string Genre get; set;         public decimal Price get; set;     我們將利用Movie類來(lái)代表數(shù)據(jù)庫(kù)中的movie(電影)。每一個(gè)Movie對(duì)象

56、的實(shí)例對(duì)應(yīng)于數(shù)據(jù)表中的一行,Movie類中的每一個(gè)屬性被映射到數(shù)據(jù)表的每一列。    在同一個(gè)Movie.cs文件中,追加如下所示的MovieDBContext類。public class MovieDBContext : DbContext public DbSet<Movie> Movies get; set;      MovieDBContext類代表了Entity Framework中的movie數(shù)據(jù)庫(kù)的上下文對(duì)象,用來(lái)處理數(shù)據(jù)的存取與更新。MovieDBContext對(duì)象

57、繼承了Entity Framework中的DbContext基礎(chǔ)類。為了能夠引用DbContext類,你需要在Movie.cs文件的頭部追加如下所示的using語(yǔ)句。using System.Data.Entity;    完整的Movie.cs文件中的代碼如代碼清單4-1所示。    代碼清單4-1 完整的Movie.cs文件using System;using System.Data.Entity;namespace MvcMovie.Models    public c

58、lass Movie            public int ID get; set;         public string Title get; set;         public DateTime ReleaseDate get; set;      

59、   public string Genre get; set;         public decimal Price get; set;         public class MovieDBContext : DbContext            public DbSet&l

60、t;Movie> Movies get; set;         如果要從數(shù)據(jù)庫(kù)中存取數(shù)據(jù),類似以上所示的代碼是必須要寫的。在下一節(jié)中,我們將要?jiǎng)?chuàng)建一個(gè)新的MoviesController類,用來(lái)顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù),并且允許用戶創(chuàng)建一個(gè)新的movie(電影)的列表。ASP.NET MVC3 快速入門-第五節(jié) 從控制器訪問(wèn)模型中的數(shù)據(jù)  (2011-03-05 17:07:04)標(biāo)簽: 視圖 控制器 模型 雜談分類: A

61、SP.NETMVC35.1 從控制器訪問(wèn)模型中的數(shù)據(jù)    在本節(jié)中,我們將要?jiǎng)?chuàng)建一個(gè)新的MoviesController類,并且書(shū)寫代碼來(lái)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù),并通過(guò)視圖模板來(lái)顯示在瀏覽器中。    鼠標(biāo)右擊Controllers文件夾,點(diǎn)擊“添加”菜單下的“控制器”菜單項(xiàng),將會(huì)彈出一個(gè)“添加控制器”對(duì)話框,如圖5-1所示。圖5-1 添加控制器    在該對(duì)話框中將控制其命名為MoviesController,然后點(diǎn)擊添加按鈕,該對(duì)話框被關(guān)閉。觀察解決方案資源管理器

62、中,Controllers文件夾下增加了一個(gè)名為MoviesController.cs的文件,并且呈打開(kāi)狀態(tài)。讓我們更新MoviesController類中的Index方法,以便獲取movie(電影)清單。    這里需要注意的是,為了引用我們前面創(chuàng)建的MovieDBContext類,你需要在文件頭部追加如下所示的兩個(gè)using語(yǔ)句。using MvcMovie.Models;using System.Linq;    修改MoviesController類中的代碼為代碼清單5-1中所示代碼。  

63、;  代碼清單5-1 MoviesController類中的完整代碼using MvcMovie.Models;using System.Linq;using System;using System.Web.Mvc;namespace MvcMovie.Controllers    public class MoviesController : Controller            MovieDBContext

64、 db = new MovieDBContext();        public ActionResult Index()                    var movies=from m in db.Movies        

65、               where m.ReleaseDate>new DateTime(1984,6,1)                       select m;   

66、         return View(movies.ToList();                這段代碼實(shí)施了一個(gè)LINQ查詢來(lái)獲取1984年夏天之后發(fā)行的所有電影。我們還需要一個(gè)視圖模板來(lái)顯示這個(gè)電影清單,所以在Index方法內(nèi)點(diǎn)擊鼠標(biāo)右鍵,然后點(diǎn)擊“添加視圖”來(lái)添加一個(gè)視圖。    由于這里我們

67、需要將一個(gè)Movie類傳遞給視圖,所以在“添加視圖”對(duì)話框中,與本教程中前幾次在該對(duì)話框中之行的操作有所不同,前幾次我們都是直接點(diǎn)擊添加按鈕來(lái)創(chuàng)建一個(gè)空白的視圖模板,但是這一次我們想讓Visual Web Developer為我們自動(dòng)創(chuàng)建一個(gè)具有一些默認(rèn)處理的強(qiáng)類型的視圖,所以我們勾選“創(chuàng)建強(qiáng)類型視圖”復(fù)選框,在模型類下拉框中選擇“Movie(MvcMovie.Models)”(如果模型類中不存在這個(gè)類,請(qǐng)先點(diǎn)擊調(diào)試菜單下的“生成MvcMovie”生成該類),在支架模板下拉框中選擇“List”,最后勾選“引用腳本”復(fù)選框,如圖5-2所示。圖5-2 添加強(qiáng)類型視圖  

68、0; 點(diǎn)擊添加按鈕,Visual Web Developer自動(dòng)生成一個(gè)視圖,并且自動(dòng)在視圖文件中添加顯示電影清單所需要的代碼。這里,我們首先用與前面修改HelloWorld控制器所用的視圖中的標(biāo)題同樣的方法來(lái)修改這個(gè)Movies控制器所用視圖中的標(biāo)題。    代碼清單5-2為修改后的這個(gè)視圖中的完整代碼。在這段代碼中,我們將releaseDate(發(fā)行日期)屬性的格式化字符串從原來(lái)的“0:g”修改為“0:d”(長(zhǎng)日期修改為短日期),將Price(票價(jià))屬性的格式化字符串從原來(lái)的“0:F”修改為“0:c”(float類型修改為貨幣類型)。

69、60;   另外,將列表標(biāo)題中的文字全部修改為中文名稱。    代碼清單5-2 Movies控制器所用視圖中的完整代碼 model IEnumerable<MvcMovie.Models.Movie>    ViewBag.Title = "電影清單"<h2>我的電影清單</h2><p>    Html.ActionLink("追加", "

70、Create")</p><table>    <tr>        <th></th>        <th>            電影名稱    

71、60;   </th>        <th>            發(fā)行日期        </th>        <th>   

72、;         種類        </th>        <th>            票價(jià)        <

73、/th>    </tr>foreach (var item in Model)     <tr>        <td>            Html.ActionLink("編輯", "Edit", new id=item.ID )

74、 |            Html.ActionLink("查看明細(xì)", "Details", new id=item.ID ) |            Html.ActionLink("刪除", "Delete", new id=item.ID )  &

75、#160;     </td>        <td>            item.Title        </td>        <td&

76、gt;            String.Format("0:d", item.ReleaseDate)        </td>        <td>          

77、  item.Genre        </td>        <td>            String.Format("0:c2", item.Price)       

78、0;</td>    </tr></table>5.2 強(qiáng)類型模型與model關(guān)鍵字    在本教程的前文中,我們介紹了一個(gè)控制器可以使用ViewBag對(duì)象來(lái)將數(shù)據(jù)或?qū)ο髠鬟f到視圖模板中。ViewBag是一個(gè)動(dòng)態(tài)對(duì)象,它提供了一種便利的,后期綁定的方法來(lái)將信息從控制器傳遞到視圖中。    ASP.NET MVC也提供了一種利用強(qiáng)類型的方法來(lái)將數(shù)據(jù)或?qū)ο髠鬟f到視圖模板中。這種強(qiáng)類型的方法為你的編碼過(guò)程提供了很豐富的編輯時(shí)的智能輸入提

79、示信息與非常好的編譯時(shí)的檢查。接下來(lái)我們將結(jié)合這種方法與我們的Movies控制器(MoviesController)與視圖模板(Index.cshtml)一起使用。    請(qǐng)注意在我們的MoviesController控制器的Index方法中,我們?cè)谡{(diào)用View()方法時(shí)傳入了一個(gè)參數(shù),代碼如下所示。public class MoviesController : Controller    MovieDBContext db = new MovieDBContext();   

80、0;public ActionResult Index()            var movies = from m in db.Movies                     where m.ReleaseDate > new DateTime(198

81、4, 6, 1)                     select m;         return View(movies.ToList();        請(qǐng)注意如下這一行代碼表示將一個(gè)movies列表從控制器

82、傳遞到了視圖中。return View(movies.ToList();通過(guò)在視圖模板文件的頭部使用model語(yǔ)句,視圖模板可以識(shí)別傳入的參數(shù)中的對(duì)象類型是否該視圖模板所需要的對(duì)象類型。請(qǐng)記住當(dāng)我們?cè)趧?chuàng)建這個(gè)Movies控制器所使用的模板時(shí),我們?cè)凇疤砑右晥D”對(duì)話框中勾選了“創(chuàng)建強(qiáng)類型視圖”復(fù)選框,在模型類下拉框中選擇了“Movie(MvcMovie.Models)”, 在支架模板下拉框中選擇了“List”。所以Visual Web Developer自動(dòng)在我們的視圖模板文件的第一行中添加了如下所示的語(yǔ)句。model IEnumerable<MvcMovie.Models.Mo

83、vie>    model關(guān)鍵字允許我們?cè)谝晥D模板中直接訪問(wèn)在控制器類中通過(guò)使用強(qiáng)類型的“模型”而傳遞過(guò)來(lái)的Movie類的列表。例如,在我們的Index.cshtml視圖模板中,我們可以通過(guò)foreach語(yǔ)句來(lái)遍歷這個(gè)強(qiáng)類型的模型,訪問(wèn)其中的每一個(gè)Movie對(duì)象。代碼如下所示。foreach (var item in Model)     <tr>        <td>   

84、         Html.ActionLink("編輯", "Edit", new id=item.ID ) |            Html.ActionLink("查看明細(xì)", "Details", new id=item.ID ) |     

85、60;      Html.ActionLink("刪除", "Delete", new id=item.ID )        </td>        <td>            item

86、.Title        </td>        <td>            String.Format("0:d", item.ReleaseDate)        </td&g

87、t;        <td>            item.Genre        </td>        <td>       

88、;     String.Format("0:c2", item.Price)        </td>    </tr>     因?yàn)檫@里的“模型”是強(qiáng)類型的(IEnumerable<Movie>),所以在循環(huán)遍歷時(shí)“模型”中的每一個(gè)項(xiàng)目(“item”)也是一個(gè)強(qiáng)類型的Movie對(duì)象,可以直接訪問(wèn)該對(duì)象的每一個(gè)屬性。同時(shí)這也意味著我們可以在編譯時(shí)檢查我們的代碼,同時(shí)在書(shū)寫代碼時(shí)也可以使用代碼編輯器提供的智能輸入提示信息,如圖5-3所示。圖5-3 可以使用強(qiáng)類型“模型”所帶來(lái)的智能輸入提示信息5.3 與SQL Server Express結(jié)合使用    我們?cè)诒竟?jié)前面

溫馨提示

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

評(píng)論

0/150

提交評(píng)論