




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、代碼清單5t moviescontrol ler類中的完整代碼using mvcmovie.models;using system.linq;using system;using system.webmvc;namespace mvcmovie.controllerspublic class moviescontroller : controllermoviedbcontext db = new moviedbcontext();public actionresujlt index )var movies=from m in db.movieswhere m.releasedate>ne
2、w datetime(1984,6,1)select m;return viewmovies tolist();這段代碼實(shí)施了一個(gè)linq査詢來獲取1984年夏天z后發(fā)行的所有電影。我們還需耍一 個(gè)視圖模板來顯示這個(gè)電影清單,所以在index方法內(nèi)點(diǎn)擊鼠標(biāo)右鍵,然后點(diǎn)擊“添加視圖 來添加一個(gè)視圖。由于這里我們需要將一個(gè)movie類傳遞給視圖,所以在“添加視圖對(duì)話框中,與本教程 中前幾次在該對(duì)話框中z行的操作有所不同,前幾次我們都是直接點(diǎn)擊添加按鈕來創(chuàng)建一個(gè) 空口的視圖模板,但是這一次我們想讓visual web developer為我們自動(dòng)創(chuàng)建一個(gè)具有一些 默認(rèn)處理的強(qiáng)類型的視圖,所以我們勾選
3、“創(chuàng)建強(qiáng)類型視圖復(fù)選框,在模型類下拉框屮選擇 /zmovie(mvcmovie.models),z (如果模型類屮不存在這個(gè)類,請(qǐng)先點(diǎn)擊調(diào)試菜單下的"生成 mvcmovie"生成該類),在支架模板下拉框中選擇"list,最后勾選"引用腳本"復(fù)選框,如圖5-2 所示。圖5-2添加強(qiáng)類型視圖點(diǎn)擊添加按鈕,visual web developer fl動(dòng)生成一個(gè)視圖,并且自動(dòng)在視圖文件中添加 顯示電影清單所盂要的代碼。這里,我們首先用與前面修改helloworld控制器所用的視圖 屮的標(biāo)題同樣的方法來修改這個(gè)movies控制器所用視圖中的標(biāo)題。代碼清
4、單52為修改后的這個(gè)視圖中的完整代碼。在這段代碼中,我們將releasedate (發(fā)行h期)屬性的格式化字符串從原來的“0: g修改為“0: d"(長(zhǎng)日期修改為短日期), 將price(票價(jià))屬性的格式化字符串從原來的"0: f"修改為0: c (float類型修改為貨幣類 型)。另外,將列表標(biāo)題屮的文字全部修改為屮文名稱。代碼清單5-2 movies控制器所用視圖中的完整代碼model ienumerable<mvcmovie.models.movieviewbag.title = ”電影清單“;<h2>我的電影清單</h2>&l
5、t;p>. actionlink (”追加”,"create")<table><tr><thx/th><th>電影名稱</th><th>發(fā)行日期</th><th>種類</th><th>票價(jià)</th></tr>foreach (var item in model) <tr><td>htm 丄 actionlink ("編輯 j "ed itj new id=item> id )
6、ihtml actionlink (”查看明纟田 j 'details11, new id=item. id )|qhtml. actionlink ('delete11, new id=item. id )</td><td>item>titie</td><td>stringformat(”0:d", item.releasedate)</td><td>item.genre</td><td>stringformat(n0:c2n, item.price)</td
7、></tr></table>5. 2強(qiáng)類型模型與©model關(guān)鍵字在木教程的前文中,我們介紹了一個(gè)控制器可以使川viewbag對(duì)象來將數(shù)據(jù)或?qū)﹀鑲鬟f 到視圖模板中。viewbag是一個(gè)動(dòng)態(tài)對(duì)彖,它提供了一種便利的,后期綁定的方法來將信息 從控制器傳遞到視圖中。asp.net mvc也提供了一種利川強(qiáng)類型的方法來將數(shù)據(jù)或?qū)﹀鑲鬟f到視圖模板中。這種 強(qiáng)類型的方法為你的編碼過程提供了很豐富的編輯吋的智能輸入提示信息少非常好的編譯 時(shí)的檢查。接卜-來我們將結(jié)合這種方法與我們的movies控制器(moviescontroller)與視圖 模板(index.csht
8、ml) 一起使用。請(qǐng)注意在我們的moviescontroller控制器的index方法中,我們?cè)谡{(diào)用view()方法吋傳 入了一個(gè)參數(shù),代碼如下所示。public class moviescontroller : controllermoviedbcontext db = new moviedbcontext();public actionresult index()var movies = from m in db.movieswhere m.releasedate > new datetime(1984, 6z 1)select m;return view(moviestolist(
9、);請(qǐng)注意如下這一行代碼表示將一個(gè)movies列表從控制器傳遞到了視圖中。return view(moviestolist();通過在視圖模板文件的頭部使用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)” ,在支架模板下拉框中選擇了 “l(fā)ist”。所以visual web developer自動(dòng)在我們的視圖模板文件的第一行屮添加了如下所示的語(yǔ)句。model
10、 tenumerable<mvcmovie models.movie>model關(guān)鍵字允許我們?cè)谝晥D模板中直接訪問在控制器類中通過使用強(qiáng)類型的“模型 而傳遞過來的movie類的列表。例如,在我們的index.cshtml視圖模板中,我們可以通過 foreach語(yǔ)句來遍歷這個(gè)強(qiáng)類型的模型,訪問其屮的每一個(gè)movie對(duì)象。代碼如下所示。foreach (var item in model) <tr><td>1.actionlink("編輯”,uedituz new id=item.id )|htm丄 actionlink ('喳看明細(xì)11, n
11、detailsn, new id=item. id )|htm 1 .actionlink ("刪j除 j udeletej new id=item< id )</td><td>item.title</td><td>string.format(”0:d", item.releasedate)</td><td>item.genre</td><td>string.format (”022”,item price)</td></tr>因?yàn)檫@里的“模型”是強(qiáng)
12、類型的(lenumerabmovie所以在循壞遍歷時(shí)“模型”屮 的每一個(gè)項(xiàng)目(“item” )也是一個(gè)強(qiáng)類型的movie對(duì)象,可以宜接訪問該對(duì)象的每一個(gè)屬 性。同時(shí)這也意味著我們可以在編譯時(shí)檢査我們的代碼,同時(shí)在書寫代碼時(shí)也可以使用代碼 編輯器提供的智能輸入提示信息,如圖5-3所示。detutjw>c4x<g cihhhk x |2vg</th><th></th> </tr>layout uhiflutforeach (v®r itea in model) <tr><td>aetionlink (*
13、l-641 , 'edit' f new ( id=ite»- id |) | ®itr1. letxonlink(*wii36# *d<tnlr nev xciteiu 15 】)i mtid actonlinkdelete*. m(lditer. d i)</td><td>xteil title</td><td> i ir . foraat (* (0: d *, iteru relexseate)</td> <td> itd 刨"d> gmre«qp
14、 oethashccxfej紗p mvcmovie . propertrs 引用j gx1 j con 林 - coneohcountcongfera<j htlbgxmcccol小 i hmtccntrower cst movesccnolibrcs 2 med?怯tj ocountmoleltcs 弓 mo/ecs ± j saiptfi -亠 v«w5 lj aooount s htlk)mxm:fi*hc teviegerttncittit.price)</td>* 468</tr>1</t<ble>100 u
15、71; x;-*級(jí)據(jù)賽更swnes或ik決方宴刃f壹理塾it細(xì)w21th 21ht文伶 ««<£)蜒sb憶 ss<e)«s(e> ia<i> ao «m<h< j'l 10t“僦山坯圖5-3可以使用強(qiáng)類型“模型”所帶來的智能輸入提示信息53與sql server express結(jié)合使用我們?cè)诒竟?jié)前面創(chuàng)建了一個(gè)moviedbcontext類,用來連接數(shù)據(jù)庫(kù),并將數(shù)據(jù)庫(kù)中的記 錄映射到movie對(duì)彖。你也許會(huì)問一個(gè)問題,怎樣定義數(shù)據(jù)庫(kù)連接?接下來我們通過在 web.config文件小增加一些連接信息
16、來定義-個(gè)數(shù)據(jù)庫(kù)的連接。打開應(yīng)用程序根fi錄下的web.config文件(請(qǐng)注意不是views文件夾下的web.config 文件),如圖54所示。圖5-4打開應(yīng)用程序根目錄下的web. config文件在web.config文件的<connectionstrings>元素屮追加類似如下所示的連接字符帝。<configuration><connectionstrings><add name=f,appliestionserviceshconnectionstring=ndara source=.sqlexpress;integratedsecurity
17、=sspi;attachdbfi丄enmme=idatadirectoryiaspnetdb.mdf;user instance=truenprovidername=nsystem.datasqlclienth /><add name=nmoviedbcontexthconnectionsti?ing=" data source= sqlexpress;initial catalog=movies;persist security info=true;user id=aaa;password=aaaaaaa hprovidername=nsystem.data.sqlcl
18、ientn /></connectionstrings>connectionstring屬性的值表示我們想耍使用sql server express的一個(gè)本地實(shí)例中的 movies數(shù)據(jù)庫(kù)。當(dāng)你安裝visual web developer express的時(shí)候,安裝過程屮也會(huì)同時(shí)門動(dòng)在 你的計(jì)算機(jī)屮安裝sql server express,你可以利用它來進(jìn)行有關(guān)數(shù)據(jù)庫(kù)的管理工作。運(yùn)行應(yīng)用程序,在瀏覽器中輸入"http:/localhost:xxxx/movies",瀏覽器中將會(huì)顯示一張 空的電影列表,如圖55所示。圖5-5數(shù)據(jù)庫(kù)中沒有數(shù)據(jù)時(shí)將默認(rèn)顯示空的列表
19、ef code-first如果發(fā)現(xiàn)使用我們提供的連接字符串而連接到的數(shù)據(jù)庫(kù)屮沒有“movies"數(shù) 據(jù)庫(kù),它將白動(dòng)為我們創(chuàng)建一個(gè)。你可以在類似x:program filesmicrosoft sql mssql10.sqlexpressmssqldata這樣的sql server的安裝口錄下去查看是否該數(shù)據(jù)庫(kù)已 被創(chuàng)建。另外注意,在木教程的前面部分屮,我們采用如下所示的代碼創(chuàng)建了一個(gè)movie模型。using system;using system.data.entity;namespace mvcmovie.modelspublic class moviepublic int id
20、 get; set; public string title get; set; public datetime releasedate get; set; public string genre get; set; public decimal price get; set; public class moviedbcontext : dbcontextpublic dbset<movie> movies get; set; 如您所見,當(dāng)我們第一次使川moviescontroller控制器類來訪問moviedbcontext所指向 的實(shí)例時(shí),entity framework可以白
21、動(dòng)為你創(chuàng)建一個(gè)新的movies數(shù)據(jù)庫(kù),并且將 moviedbcontext類的movies屬性映射到一個(gè)新的movies表,并j1 口動(dòng)將它創(chuàng)建。這個(gè)表 中的每一行被映射到一個(gè)新的movie類的實(shí)例,movies表的每一列被映射到movie類的一 個(gè)屬性。你iij以使用sql server management studio來查看使用模烈創(chuàng)建出來的數(shù)據(jù)席與數(shù)據(jù) 表。在 windows 的開始菜單中打開 sql server management studio,并且連接到 web.config 屮所配置的數(shù)據(jù)庫(kù),如圖56所示。圖 5-6 使用 sql server management stud
22、 i o 連接數(shù)據(jù)庫(kù)點(diǎn)擊“連接”按鈕進(jìn)行連接,查看數(shù)據(jù)庫(kù),可以看見movies數(shù)據(jù)庫(kù)與數(shù)據(jù)表已被創(chuàng)建, 如圖57所示。圖5-7 movies數(shù)據(jù)庫(kù)與數(shù)據(jù)表已被創(chuàng)建 鼠標(biāo)右擊movies數(shù)據(jù)表,并點(diǎn)擊"設(shè)計(jì)",如圖5-8所示。圖5-8點(diǎn)擊“設(shè)計(jì)”查看movies表的屬性你可以看見movies表中各字段的屬性,其中id字段被自動(dòng)設(shè)定為自增長(zhǎng)主鍵,如圖 5-9中所示。 licronoft sql. server ifinucftbent studiot丄安全桂 竝性 _l «#»;«> d uj0lmpr1ss i5l$erv.r 10 0 -
23、j »«*a (j丄 s»m< brokeri ntdeteune rr.«r(tk*-<cc) dec<m3 0)2s3itl* ee5tdtegrrepice乙rrttf旦盤雖艾件 nffiiz) tqibqr) j5bh) 丄 ihtgjlqd jj心 jimo) «d<t) tt£o «rh q$)ijjissquxfb 4bo i”| >c列名?j8良型尤許懇|<hvai.二葯18關(guān)系s)二?丄利世3 dbo bmt«t«4»te£ dbo
24、 iant ire te afi 義 si(kk)b (««)csb)n it直久ft比明ii性工x(mjxw nuum 觴識(shí)列mq喜現(xiàn)數(shù)18空間航 momam枚升aw圖5-9查看movies表中各字段屬性這里請(qǐng)注意movies表小各字段是如何映射到movie類屮各屬性上的。entity framework code-fist自動(dòng)在你創(chuàng)建的movie類的基礎(chǔ)上創(chuàng)建了這張movies數(shù)據(jù)表。你現(xiàn)在已經(jīng)可以訪問數(shù)據(jù)庫(kù)中的movies數(shù)據(jù)表,并門有了一個(gè)簡(jiǎn)單的頁(yè)面來顯示這個(gè) 表中的內(nèi)容。在下一節(jié),我們將增加一個(gè)追加數(shù)據(jù)的方法和一個(gè)追加數(shù)據(jù)的視圖,并h向數(shù) 據(jù)庫(kù)中追加一些數(shù)據(jù)。第六
25、節(jié)增加追加數(shù)據(jù)的方法和視圖在木節(jié)屮我們將要在數(shù)據(jù)庫(kù)屮追加并保存一些數(shù)據(jù)。我們將要?jiǎng)?chuàng)建一個(gè)表單以及一些表 單輸入控件,用來輸入數(shù)據(jù)信息。當(dāng)用戶提交表單時(shí)將把這些用戶輸入的信息保存在數(shù)據(jù)庫(kù) 中。我們可以通過在瀏覽器中輸入z/htt p :/l oca i h ost :xx/m o vies/createw這個(gè)url地址來訪問這 個(gè)表單。6.1顯示追加信息時(shí)所用表單首先,我們需要在我們的moviescontroller類屮追加一個(gè)create方法,該方法返回一個(gè) 視圖,該視圖中包含了用戶輸入信息時(shí)所要用到的表單。public actionresult create()return viev();現(xiàn)
26、在讓我們來實(shí)現(xiàn)這個(gè)create方法中所要返回的視圖,我們將在這個(gè)視圖中向用八顯 示追加數(shù)據(jù)時(shí)所需要用到的表單。在create方法中點(diǎn)擊鼠標(biāo)右鍵,并點(diǎn)擊上f文菜單中的“添 加視圖。在"添加視圖對(duì)話框中選擇“創(chuàng)建強(qiáng)類型視圖,將模型類指定為"movie,在支架模板 中選擇create,如圖6-1所示。圖6-1添加追加數(shù)據(jù)時(shí)所用視圖點(diǎn)擊添加按鈕,views文件夾下的movies文件夾小將會(huì)h動(dòng)添加一個(gè)名為 “create.cshtml”的視圖模板文件。因?yàn)槟阍谥Ъ苣0邋x擇了 “create”,所以支架模板會(huì) 在該視圖模板文件中口動(dòng)生成一些默認(rèn)代碼。打開該文件進(jìn)行查看,在該文件中已
27、經(jīng)口動(dòng)創(chuàng) 建了一個(gè)html表單,以及一段川來顯示校驗(yàn)時(shí)錯(cuò)i吳信息的文字。visual web developer檢 杳movies類,并白動(dòng)創(chuàng)建與該類中每個(gè)屬性相對(duì)應(yīng)的<label>元索以及<input>元索。支架模 板自動(dòng)生成的創(chuàng)建數(shù)據(jù)所用視圖屮的代碼如代碼清單6-1所示。代碼清單6-1支架模板自動(dòng)生成的創(chuàng)建數(shù)據(jù)所用視圖中的代碼model mvcmovie. models. movieviewbag. title = "create"<h2>create</h2><script src=,zur 1 content c
28、 vscripts/jquery. validate min. js")"type 二"tex t/javascr ipt,z></scr ipt><script src=z,ljr 1 con tent ("'/scripts/jquer y. validate unobtrusive min. js")type 二"text/javascript,z></script>您using (lltml. beginformo) ©him 1. vai ideltionsumma
29、ry (true)<fieldset><legend>movie</legend><div class",zeditor-laberz>©himi. labelfor(model => model. title)©lltml. editorfor(model => model. title)©html. validationmessageeor(model => model. title)</div><div class=/zeditortabel">
30、169;html. labelfor(model => model. releasedate)</div><div class=/yeditor-field,/>©html. editoreor(model => model. releasedate)htm1. va1idationmessageeor(mode1 => model. releasedate)</div><div class="editor*-label">©html. label for(model => mode
31、l. genre)</div><div class二"editor-field"editorfor (model => model. genre)©html. vaiidationmessagefor(model => model. genre)</div><div class二"editor-label"labelfor (model => model. price)</div><div class二"editor-field"©html.
32、editorfor(model => model. price)validationmessageeor (model => model. price)</div><p><input type二"submit" value=,create" /></p></fieldset><div>actionlink ("back to list", "index")</div>這段代碼中使用了兒個(gè)html幫助器的方法來幫助簡(jiǎn)化html標(biāo)簽的
33、書寫方法。html.labelfor 幫助器用于顯示字段名("title","releasedate","genre"或者"price")。 html.edito汗or幫助器用于顯示一個(gè)提供給用戶輸入信息的html的<input>元素。html.validationmessagefor幫助器用于顯示一個(gè)針對(duì)屬性的校驗(yàn)信息。請(qǐng)注意我們的視圖模 板的頂部有一個(gè)"model mvcmovie.models.movie''的聲明,該聲明將我們的視圖模板屮的 模型"強(qiáng)類型化成一
34、個(gè)movie類。運(yùn)行應(yīng)用程序,在瀏覽器中輸入"http:/localhost:xx/movies/create",瀏覽器中顯示如圖 6-2所不。圖6-2支架模板自動(dòng)生成的視圖在書寫中文網(wǎng)站或中文web應(yīng)用程序的時(shí)候,可以將代碼清單6-1中的代碼修改為代 碼清單6-2中所示代碼。代碼清單6-2將支架模板自動(dòng)生成的代碼進(jìn)行漢化model mvcmovic. models. movieviewbag. title = 追加電影信息";52追加電影信息</h2><script sre二"ur1 content("/scripts/jq
35、uery validate min. js")"type=,/text/javascript,/x/script><script sre一"ur 1 content (z,/scripts/jquery. validate unoblrusivo min. js")" type",/text/javascript,/x/script>©using (html. beginformo) ©htm 1. validationsumiiuiry (true)<fieldset><leg
36、end> 電影 </l egend><div class二"editor-label"標(biāo)題©lltnil. editorfor(model => model. title)©html. validationmessageeor(model => model. title)</div><div cl ass 二"ed it ortabel">發(fā)行日期</div><div class="editor-field">©html.
37、 editoreor(model => model. releasedate)©lltnil. vaiidationmessageeor (model => model. releasedate)</div><div class="editor-label"種類</div><div class二"editor-field"editorfor(model -> model. genre)©html. vaiidationmessagefor(model => model. ge
38、nre)</div><div classeditor-label,z>票價(jià)</div><div class二"editor-field"©html. editorfor(model => model. price)vaiidationmessagefor(model -> model. price)</div><p><input type二"submit" value二"追加"/></p></fieldset>)
39、<div>©lltnil. actionlink c返回電影列表","index")</div>修改完畢后唾新運(yùn)行程序,然后訪問http:/localhost:xx/movies/createn這個(gè)地址,瀏 覽器中顯示如圖6-3所示。圖6-3中文化后的追加電影信息畫面鼠標(biāo)右擊瀏覽器中顯示的該頁(yè)而,點(diǎn)擊“顯示源代碼,顯示出來的源代碼如代碼清單 6-3所示。(為了突出本節(jié)內(nèi)容,只顯示與本節(jié)中相關(guān)部分)。代碼清單6-3追加電影信息畫面在瀏覽器中的html代碼<!doctype html><html><hea
40、d><meta htlp-cquiv二"content-type" content二氣cxt/html; charset二utf-87><title>追加電影信息</title><link href=z,/content/site css" :rel二"stylesheet" type二"text/css" /><script src=,7scripts/jquery- 1.4. 4. min. js"type=,/text/javascriptz&quo
41、t;></script></head><body><h2追加電影信息</h2><script sre二"/scripts/jquery validate min js"type二"text/javascript"</script><script sre二/scripts/jquery. validate unobtrusive min. js"type=,ztext/javascript/></script><form action=vm
42、ovies/crcate,z method二"post"<fieldset>< 1 egcnd> 電影 </legcnd><div class二"cditortabcl">標(biāo)題<input class二"tcxt-box single-1 inc,z id-"titlc" name二"title" type二"text" value二""/><span class=/,field-validation
43、-valid,z data-valmsg-for=/ztitlez, data-val msg-rep i acc=,truo,z></span></div><div c 1 ass=,edi tor-1 abe 1,z>發(fā)行日期</div><div class二"editor-field"<input class二氣ext-b(x single-1 ine,z data-val=z,true,z dala-val一required二"the releasedate field is require
44、d" id=z,rclcasedatez,namo=zzro 1 oascdattypo="toxt" valuo二""/><span c1 ass二"field-va1idation-valid"data-valmsg-for二"releasedate"data-valmsg-replace二"lrue"></span></div><div c 1 ass=,edi tor-1 abe 1,z>種類</div><
45、div class二"editor-field"<input class二氣ext-b(x single-1 ine,z id二"genre" name=,/genre type二氣ext" value=" /><span class=zzfiold-validation-val id,z data-va 1 msg-for="gonrez, data-valmsg-replace二"truc"/></div><div class二"editottabe
46、l">票價(jià)</div><div class二"editor-field"<input class=z,text-box singletine" data-val二氣rue" data-val-numbor="tho field price must bo a number.,z data-val-required二"the price field is required"id-"price" name二"price" type二"tex
47、t" value二" /><span class=/,field-validation-valid,z data-valmsg-for=/zprice/, dat a-val msg-rep lacc=,ztrue/"></span></div><p><input type二"submit" value二"追加"/></p></fieldset></form><div><a href=,7m()vies,&
48、gt;返回電影列表</s></div><div id二"footer"</div></body></html>從這段代碼屮可以看出,表單的action屬性被設(shè)置為7movies/create,當(dāng)點(diǎn)擊追加按 鈕時(shí)會(huì)把表單屮各文木框屮的數(shù)據(jù)提交到服務(wù)器端進(jìn)行保存。6.2 處理 http-p0st至眥為止,我們己經(jīng)實(shí)現(xiàn)了顯示追加數(shù)據(jù)所用表單的所需代碼。我們的下一步是編寫代 碼來進(jìn)行表單提交到服務(wù)器后的處理。我們將要獲取用戶在數(shù)據(jù)庫(kù)中輸入的信息并r將它們 作為一個(gè)新的movie保存到數(shù)據(jù)庫(kù)中。為了實(shí)現(xiàn)這一處理,我們需
49、要在moviescontroller類屮追加第二個(gè)create方法。這個(gè) create方法具冇一個(gè)httppost屬性,它意味著我們將要用它來處理提交至u"/movies/create" 這個(gè)url地址的請(qǐng)求。另外,所冇提交到"/movies/create"這個(gè)url地址的非post的請(qǐng)求 (即get請(qǐng)求)將被第一個(gè)create方法進(jìn)行處理,即簡(jiǎn)單地返回一個(gè)空的表單。代碼清單6-4中所示代碼為moviescontroller類中的兩個(gè)create方法的全部代碼。代碼清單6-4 mov i escontrol i er類中的兩個(gè)create方法的全部代碼p
50、ublic actionresult create()return vicw();httppostpublic actionresult create(movie newmovie)if (modelstate. isvalid)db. movies. add(newmovie);db. savcchangos ();return rcdirccttoaction cindox");elsereturn view(newmovie);之前我們介紹了 asp.net mvc可以h動(dòng)地將一個(gè)url地址中的杳詢字符串中的參數(shù)(例 如:傳遞到/7helloworld/welcome?name
51、=scott&numtimes=5/,)作為一個(gè)方法的參數(shù)傳遞到 方法中。同樣地,除了傳遞查詢字符串中的參數(shù)之外,asp.net mvc也可以用這種方法來傳 遞提交后的表單參數(shù)。提交后的表單參數(shù)可以作為一個(gè)獨(dú)立的參數(shù)傳遞到一個(gè)方法中。例如,asp.net mvc framework可以將我們捉交的表單中的控件值作為參數(shù)傳遞到具冇httppost屬性的create 方法屮,如下所示。lhttppostpublic actionrcsult cideate (slicing title, datetime rclcascdate, string genre, decimal price)提
52、交的表單值也可以被映射到一個(gè)復(fù)合的,具有屬性的對(duì)彖(譬如我們的movie類), 并且作為一個(gè)單一的參數(shù)傳遞到一個(gè)方法中。在代碼清單64中我們使用的就是這個(gè)方法。 請(qǐng)注意create方法是怎樣作為一個(gè)參數(shù)來接收movie對(duì)象的。httppostpublic actionresult create(movie newmovie)if (modelstate. isvalid)db. mov ies. add (newmov i e);db. savechanges ();return redirecttoaction("index");return view(newmovie)
53、;modelstate.isvalid屬性用來檢査提交的表單中的數(shù)據(jù)是否能夠被用來創(chuàng)建一個(gè)movie 對(duì)象。如果數(shù)據(jù)是有效的,我們的代碼將把提交上來的這個(gè)movie類追加在moviesdbcontext 對(duì)象的實(shí)例中的movies集合中。調(diào)用我們的moviesdbcontext對(duì)象實(shí)例的savechanges方 法將把這個(gè)movie對(duì)象保存在數(shù)據(jù)庫(kù)中。保存數(shù)據(jù)完畢后,代碼把畫面重定向到 moviescontroller類的index方法中,瀏覽器屮將會(huì)打開電影清單顯示曲而,并且在電影清單 中顯示剛才追加的這條數(shù)據(jù)。如果提交的值是無效的,將會(huì)返回到電彩信息追加畫面中,并且在表單的各輸入控件中 顯
54、示各門的提交的值。各輸入控件的html.validationmessagefor幫助器將會(huì)顯示對(duì)應(yīng)的出錯(cuò) 信息。6. 3追加一條電影信息運(yùn)行應(yīng)用程序,在瀏覽器中輸入uhttp:/localhost:xx/movies/create,在表單中輸入一 條電影信息,然后點(diǎn)擊追加按鈕,如圖64所示。匚 i£ad 電 kfzjfi. windo wk iritcrncl fxplorisfenc m*»/locho<i442d/movi«t/cted7 *t x©0彳m-和卜mow77<a<d mw »wza0<a> 9-j
55、kp n"妙金余 頤%«.a s我的mvcmovie應(yīng)用程序 圖6-4追加電影信息點(diǎn)擊追加按鈕進(jìn)行提交,表單中輸入的這條電影信息將會(huì)保存到數(shù)據(jù)庫(kù)中,保存后瀏覽 器中將打開電影清單畫而,并且將這條追加的電影顯示在清單中,如圖6-5所示。圖6-5追加后電影將顯示在電影清單中你町能已經(jīng)注意到了在這個(gè)電影清單畫面小將剛才追加的電影票價(jià)顯示成了 10元,ku 不是用戶輸入的9.99元,這是因?yàn)楫?dāng)前該數(shù)據(jù)表中decimal類烈的默認(rèn)和度只能識(shí)別與處理 整數(shù)值,并且白動(dòng)將小數(shù)部分四舍五入。關(guān)于如何解決這個(gè)問題,我們將在下一節(jié)屮對(duì)模型 進(jìn)行一些調(diào)整的時(shí)候會(huì)同時(shí)進(jìn)行介紹?,F(xiàn)在我們已經(jīng)有了一個(gè)
56、web應(yīng)用程序的維形,我們可以在數(shù)據(jù)庫(kù)小追加數(shù)據(jù),顯示數(shù) 據(jù)。代碼清單6-5是現(xiàn)在這個(gè)moviescontroller類的完整代碼。代碼清單6-5 moviescontrol ler類的完整代碼using mvcmovie.mode1s;using systemlinq;using system;using system. webmvc;namespace mvcmoviecontrollerspublic class moviescontroller : controllermoviedbcontext db = new moviedbcontext();public actionresul
57、t index0var movies=from m in db. movieswhere m. releasedate>new datetime(1984, 6, 1)select in;return view(moviestolist();public actionresult create()return viev();httppostpublic actionresult create(movie newmovie)if (modelstate. isvalid)db. movies. add(newmovie);db. savechanges();return redirectt
58、oaction("index");elsereturn viev(newmovie);在下一節(jié),我們將介紹如何為我們的模型添加附加的屬性,如何在映射后的數(shù)據(jù)庫(kù)小定 制我們的票價(jià)列的精度。第七節(jié)在movie (電影)模型與數(shù)據(jù)表中添加字段在本節(jié)屮我們將要對(duì)我們的模型類進(jìn)行修改,同時(shí)介紹如何在asp.net mvc3屮根據(jù)這 些修改來調(diào)整我們數(shù)據(jù)衣的結(jié)構(gòu)。7. 1在我們的movie模型中添加一個(gè)rating(電影等級(jí))屬性首先,我們?cè)诂F(xiàn)存的movie類中添加一個(gè)附加的"rating"屬性。打開movie.cs文件,在 movie類中添加一個(gè)rating屬性,
59、如下所示。public string rating get; set; 現(xiàn)在完整的movie類的代碼如代碼清單7-1所示。代碼清單7-1完整的movie類的代碼public class moviepubl ic int ii)public string titlepublic datctime rcleascdate got; sot; public string genrepublic decimal pricepublic string rating點(diǎn)擊"調(diào)試菜單下的生成mvcmovie,重新編譯應(yīng)用程序?,F(xiàn)在我們已經(jīng)將我們的模型進(jìn)行了更新,讓我們同樣地修改我們的views文件夾
60、下的 movies文件夾下的index.cshtml文件與create.eshtml這兩個(gè)視圖模板文件,在視圖中添加這 個(gè)rating屬性。首先打開index.cshtml文件,在內(nèi)容為"票價(jià)(對(duì)應(yīng)price屬性)wth元素后而追加"vth 電影等級(jí)v/th列標(biāo)題(對(duì)應(yīng)rating 性)。在顯示price屬性內(nèi)容的td元素后面追加一個(gè) vtd元素,用來顯示rating屬性的內(nèi)容。進(jìn)行了這兩個(gè)修改示的index.cshtml文件屮的主要 內(nèi)容如下所示。<table><tr><th></th><th>電影名稱</
61、th><th>發(fā)行日期</th><th>種類</th><th>票價(jià)</th><th>電影等級(jí)</th></tr>foreach (var item in model) <tr><td>html. actionlinkc編輯","edit", new id=item. td ) |©html. actionlinkc查看明細(xì)”,"detels", new id=item. id ) |html. ac
62、tionlink(*刪除","delete", new id=item. id )</td><td>item. title</td><td>string. format c0:d”,i tem. releasedate)</td><td>item. genre</td><td>©string. format(”0:c2", item.price)</td><td>©item. rating</td><
63、;/tr>)</table>接下來打開create.cshtml文件,在表單底部追加如下所示的標(biāo)簽。它將顯示為一個(gè)文 木框,用來輸入rating屬性的內(nèi)容。<div c 1 ass=,/editor-1 abe 1電影等級(jí)</div><div class二"editor-field"html. editorfor(model => model. rating)©him1 va1idationmessagefor(modei => mode1 rat ing)</div>7.2維護(hù)模型與數(shù)據(jù)庫(kù)結(jié)構(gòu)之間的差別現(xiàn)在我們己經(jīng)將應(yīng)用程序修改
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度城市基礎(chǔ)設(shè)施建設(shè)債權(quán)轉(zhuǎn)讓與融資合同
- 2025年度商鋪轉(zhuǎn)讓三方合同附帶品牌授權(quán)與培訓(xùn)支持
- 2025年度石料場(chǎng)生產(chǎn)承包環(huán)境保護(hù)與修復(fù)責(zé)任合同
- 2025年度教育培訓(xùn)機(jī)構(gòu)兼職正式聘用教學(xué)合同
- 2025年度購(gòu)房合同解除補(bǔ)償協(xié)議范文
- 2025年度農(nóng)村出租房租賃與農(nóng)村養(yǎng)老服務(wù)業(yè)合作合同
- 二零二五年度股權(quán)代持協(xié)議書:文化娛樂股權(quán)代持與IP開發(fā)合作合同
- 2025年旅游行業(yè)現(xiàn)狀分析:國(guó)內(nèi)旅游人次預(yù)計(jì)達(dá)到63億
- 2024-2025學(xué)年北京市二中高三上學(xué)期期中調(diào)研生物試卷
- 2025年吉林省吉林市單招職業(yè)適應(yīng)性測(cè)試題庫(kù)匯編
- 2024年青島港灣職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫(kù)含答案解析
- 《信息技術(shù)(拓展模塊)》高職全套教學(xué)課件
- 環(huán)保行業(yè)環(huán)保管理制度環(huán)保責(zé)任落實(shí)制度
- 2025年山東菏投建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 市政質(zhì)量員繼續(xù)教育考試題庫(kù)集(含答案)
- 售后工程師述職報(bào)告
- 《公司法完整版》課件2024
- 2024年下半年信息系統(tǒng)項(xiàng)目管理師真題及答案
- ??低曤娏π袠I(yè)系統(tǒng)解決方案
- 2024-2030年中國(guó)街舞培訓(xùn)行業(yè)發(fā)展趨勢(shì)及競(jìng)爭(zhēng)格局分析報(bào)告
- 期末練習(xí)卷(模擬試題)-2024-2025學(xué)年 一年級(jí)上冊(cè)數(shù)學(xué)人教版
評(píng)論
0/150
提交評(píng)論