本篇內(nèi)容介紹了“ASP.NET MVC框架可以做什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司專注于江油企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。江油網(wǎng)站建設(shè)公司,為江油等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
對(duì)于ASP.NET MVC,很多開發(fā)者持歡迎的態(tài)度。不過在吸引了更多人目光的同時(shí),我們也應(yīng)該看到有很多開發(fā)人還不太了解ASP.NET MVC。本文的作用在于給大家一個(gè)簡(jiǎn)單易懂的ASP.NET MVC教程。
1、ASP.NET MVC介紹及與ASP.NET WebForm的區(qū)別
剛開始為了搞清楚ASP.NET MVC到底值不值得用,翻來覆去想了一個(gè)多禮拜,看了好多資料和評(píng)論,***決定還是值得一用。MVC不是一個(gè)簡(jiǎn)單的設(shè)計(jì)模式,更像一種架構(gòu)模式,或者一種思想,剛開始一聽MVC想到的就是模板引擎,NVelocity,StringTempleate等,但感覺如果只是為了用模板這種獨(dú)立的前臺(tái)設(shè)計(jì)方式,沒必要用ASP.NET MVC,大多數(shù)情況用Repeaterk控件和自定義控件兒就能做到,而且ASPX頁面上本來就可以寫c#代碼,一些比較復(fù)雜的界面表現(xiàn)邏輯用普通的WebForm也能實(shí)現(xiàn),其實(shí)ASP.NET MVC的VIEW部分默認(rèn)用的還是aspx的解析器。ASP.NET MVC的View部分讓你寫一些大型的,布局復(fù)雜的網(wǎng)站更方便,更底層,更直接,很受對(duì)css,js很熟悉的開發(fā)者的歡迎。
當(dāng)你理解了MVC的思想后,會(huì)發(fā)現(xiàn)ASP.NET MVC的好處真正在于Controller和Action,你寫一段代碼能很明確的知道是在處理什么請(qǐng)求,畢竟web程序處理的是一個(gè)一個(gè)的http請(qǐng)求,不像windows桌面程序,基于事件驅(qū)動(dòng)更直觀。ASP.NET MVC的Controller讓你寫一些web api或者rest風(fēng)格的接口很方便(以前可能要用HttpHandler來做),這些Controller只負(fù)責(zé)提供數(shù)據(jù)(具體的ActionResult類,如JsonResult,JavascriptResult等)給使用者,比如一個(gè)Ajax調(diào)用,或者View層。
至于Model層,我看網(wǎng)上大多數(shù)人是用LINQ TO SQL實(shí)現(xiàn)的,畢竟使用起來很簡(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以前的一些東西不能用了,比如以前自己寫的一些服務(wù)器控件兒不能用了,WebPart,皮膚,各種數(shù)據(jù)綁定控件等都不能用了,但Master頁還能用,Asp.net Ajax control toolkit(服務(wù)端)也不能用了,但asp.net ajax library(客戶端js庫)還能繼續(xù)使用,基于頁面和目錄的授權(quán)不能用了(因?yàn)楝F(xiàn)在沒頁面,只有view了),但MemberShip和Forms身份驗(yàn)證還是支持的。標(biāo)準(zhǔn)WebForm的生命周期變了,好些事件沒了,現(xiàn)在你可以寫一些攔截器(Action攔截器、Result攔截器和Exception攔截器)來影響請(qǐng)求的處理過程,還有一些區(qū)別,總之失去的東西,都有變通的方法能找吧回來。
2、linq to sql如何獲取插入語句產(chǎn)生的標(biāo)識(shí)列的值?
其實(shí)很簡(jiǎn)單,把對(duì)象插入數(shù)據(jù)庫后,直接取值就行了,如下BBSPost是一個(gè)實(shí)體類,其中PostID在數(shù)據(jù)庫里是自增列。
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)單不過了,在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里寫一個(gè)隱藏域,如下
<%= Html.Hidden("scroll", ViewData["scrool"])%>
然后在處理客戶端請(qǐng)求的action里給ViewData里存儲(chǔ)一下提交上來的值(從FormCollection里取)。
public ActionResult reply(BBSPost post, FormCollection coll) { ... ViewData["scroll"] = coll["scroll"]; ... return View("show_post",posts); }
這樣頁面提交后隱藏域里就會(huì)保存著提交前滾動(dòng)條的位置,然后我們?cè)谟肑Query寫一些邏輯實(shí)現(xiàn)最終的效果。