新聞中心
對(duì)于ASP.NET MVC,很多開(kāi)發(fā)者持歡迎的態(tài)度。不過(guò)在吸引了更多人目光的同時(shí),我們也應(yīng)該看到有很多開(kāi)發(fā)人還不太了解ASP.NET MVC。本文的作用在于給大家一個(gè)簡(jiǎn)單易懂的ASP.NET MVC教程。

創(chuàng)新互聯(lián)建站從2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元白沙黎族做網(wǎng)站,已為上家服務(wù),為白沙黎族各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
ASP.NET MVC 1.0發(fā)布有段兒時(shí)間了,剛發(fā)布不久的時(shí)候試用了一下,做了一個(gè)簡(jiǎn)單的BBS,現(xiàn)在總結(jié)一些經(jīng)驗(yàn)和小技巧和大家分享。網(wǎng)上關(guān)于ASP.NET MVC的系列教程有好幾個(gè),所以就不從頭開(kāi)始介紹了,結(jié)尾處給大家推薦了幾個(gè)鏈接,需要的話可以從頭系統(tǒng)的看看。
1、ASP.NET MVC介紹及與ASP.NET WebForm的區(qū)別
#T#
剛開(kāi)始為了搞清楚ASP.NET MVC到底值不值得用,翻來(lái)覆去想了一個(gè)多禮拜,看了好多資料和評(píng)論,***決定還是值得一用。MVC不是一個(gè)簡(jiǎn)單的設(shè)計(jì)模式,更像一種架構(gòu)模式,或者一種思想,剛開(kāi)始一聽(tīng)MVC想到的就是模板引擎,NVelocity,StringTempleate等,但感覺(jué)如果只是為了用模板這種獨(dú)立的前臺(tái)設(shè)計(jì)方式,沒(méi)必要用ASP.NET MVC,大多數(shù)情況用Repeaterk控件和自定義控件兒就能做到,而且ASPX頁(yè)面上本來(lái)就可以寫(xiě)c#代碼,一些比較復(fù)雜的界面表現(xiàn)邏輯用普通的WebForm也能實(shí)現(xiàn),其實(shí)ASP.NET MVC的VIEW部分默認(rèn)用的還是aspx的解析器。ASP.NET MVC的View部分讓你寫(xiě)一些大型的,布局復(fù)雜的網(wǎng)站更方便,更底層,更直接,很受對(duì)css,js很熟悉的開(kāi)發(fā)者的歡迎。
當(dāng)你理解了MVC的思想后,會(huì)發(fā)現(xiàn)ASP.NET MVC的好處真正在于Controller和Action,你寫(xiě)一段代碼能很明確的知道是在處理什么請(qǐng)求,畢竟web程序處理的是一個(gè)一個(gè)的http請(qǐng)求,不像windows桌面程序,基于事件驅(qū)動(dòng)更直觀。ASP.NET MVC的Controller讓你寫(xiě)一些web api或者rest風(fēng)格的接口很方便(以前可能要用HttpHandler來(lái)做),這些Controller只負(fù)責(zé)提供數(shù)據(jù)(具體的ActionResult類,如JsonResult,JavascriptResult等)給使用者,比如一個(gè)Ajax調(diào)用,或者View層。
至于Model層,我看網(wǎng)上大多數(shù)人是用LINQ TO SQL實(shí)現(xiàn)的,畢竟使用起來(lái)很簡(jiǎn)單,設(shè)計(jì)好表,用LINQ 設(shè)計(jì)器往vs.net里一拖就能用了。而且本身就是強(qiáng)類型的,再在自動(dòng)生成的代碼上加一些分部方法,就可以實(shí)現(xiàn)數(shù)據(jù)的有效性驗(yàn)證等。還有就是對(duì)LINQ做的Model進(jìn)行數(shù)據(jù)持久化和查詢的時(shí)候更方便,直接用DbContext一個(gè)類,增刪改查全能搞定。
有得就有舍,ASP.NET MVC雖然提供了先進(jìn)的思想和一些便利,但ASP.NET以前的一些東西不能用了,比如以前自己寫(xiě)的一些服務(wù)器控件兒不能用了,WebPart,皮膚,各種數(shù)據(jù)綁定控件等都不能用了,但Master頁(yè)還能用,Asp.net Ajax control toolkit(服務(wù)端)也不能用了,但asp.net ajax library(客戶端js庫(kù))還能繼續(xù)使用,基于頁(yè)面和目錄的授權(quán)不能用了(因?yàn)楝F(xiàn)在沒(méi)頁(yè)面,只有view了),但MemberShip和Forms身份驗(yàn)證還是支持的。標(biāo)準(zhǔn)WebForm的生命周期變了,好些事件沒(méi)了,現(xiàn)在你可以寫(xiě)一些攔截器(Action攔截器、Result攔截器和Exception攔截器)來(lái)影響請(qǐng)求的處理過(guò)程,還有一些區(qū)別,總之失去的東西,都有變通的方法能找吧回來(lái)。
2、linq to sql如何獲取插入語(yǔ)句產(chǎn)生的標(biāo)識(shí)列的值?
其實(shí)很簡(jiǎn)單,把對(duì)象插入數(shù)據(jù)庫(kù)后,直接取值就行了,如下BBSPost是一個(gè)實(shí)體類,其中PostID在數(shù)據(jù)庫(kù)里是自增列。
- var db = new BBSDbContext(connstr);
- BBSPost post = new BBSPost()
- post.PostUser = User.Identity.Name;
- post.PostTime = DateTime.Now;
- db.BBSPosts.InsertOnSubmit(post);
- db.SubmitChanges();
- int postid = post.PostID; //這里就能取到標(biāo)識(shí)列的值。
3、ASP.NET MVC里在請(qǐng)求提交后如何后維持滾動(dòng)條位置?
在WebForm里再簡(jiǎn)單不過(guò)了,在web.config里配置MaintainScrollPositionOnPostBack=true就搞定了,但在MVC里就不行了。我們知道了原理后,可以自己實(shí)現(xiàn),其實(shí)就是在提交表單或者滾動(dòng)條滾動(dòng)的事件里捕獲當(dāng)前滾動(dòng)條的位置,把數(shù)值放在一個(gè)隱藏域里,提交給服務(wù)端,服務(wù)端應(yīng)答后,從隱藏域里取出滾動(dòng)條的位置,用js操縱滾動(dòng)條滾動(dòng)到上次的位置。
我們先在View里寫(xiě)一個(gè)隱藏域,如下
- <%= Html.Hidden("scroll", ViewData["scrool"])%>
然后在處理客戶端請(qǐng)求的action里給ViewData里存儲(chǔ)一下提交上來(lái)的值(從FormCollection里取)。
- public ActionResult reply(BBSPost post, FormCollection coll) {
- ...
- ViewData["scroll"] = coll["scroll"];
- ...
- return View("show_post",posts);
- }
這樣頁(yè)面提交后隱藏域里就會(huì)保存著提交前滾動(dòng)條的位置,然后我們?cè)谟肑Query寫(xiě)一些邏輯實(shí)現(xiàn)最終的效果。


咨詢
建站咨詢