電腦技巧.圖片新聞 | 用戶注冊 | 用戶中心 | 發表文章 | 留言簿 | 掃一掃手機閱讀
          |繁體中文|  RSS訂閱 |極速版  |手機訪問  
        電腦常用技巧,PC Skill,電腦知識,組裝維修,經驗,資料精華寶庫,HUGESKY CMS官網,鴻天全站,HUGESKY-ASP.NET MVC 入門介紹 (上)
        本站申明:
        本站盡量純凈無廣告,提供交流學習類共享資料。[廣告投放說明] [聯系]
        • 首 頁
        • 電腦知識
        • 應用技巧
        • 組裝技巧
        • 維修技巧
        • 網絡技巧
        • 組網通信
        • 辦公技巧
        • 技巧視頻
        • 編程技巧
        • 防毒技巧
        • 博客圈
        會員注冊關閉
        帳號: 密碼: 驗證碼: 點擊顯示驗證碼 記住
        電腦技巧 -> 編程技巧 -> NET編程技巧

        ASP.NET MVC 入門介紹 (上)

        作者:未知來源:網絡收集 整理日期:2011-05-21
        推薦指數: 點擊:4419   文字大小: 加入收藏夾


        參考文章 ASP.NET MVC Overview.

          1. MVC模式

          MVC模式是一種軟件架構模式。它把軟件系統分為三個部分:模型(Model),視圖(View)和控制器(Controller)。MVC模式最早由Trygve Reenskaug在1974年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟件設計模式。MVC模式的目的是實現一種動態的程序設計,使后續對程序的修改和擴展簡化,并且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部份分離的同時也賦予了各個基本部分應有的功能。    

          模型(Model) “數據模型”(Model)用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“模型”有對數據直接訪問的權力,例如對數據庫的訪問。“模型”不依賴“視圖”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用于監視此模型的視圖必須事先在此模型上注冊,從而,視圖可以了解在數據模型上發生的改變.

          視圖(View) 視圖層能夠實現數據有目的的顯示(理論上,這不是必需的)。在視圖中一般沒有程序上的邏輯。為了實現視圖上的刷新功能,視圖需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那里注冊。

          控制器(Controller) 控制器起到不同層面間的組織作用,用于控制應用程序的流程。它處理事件并作出響應。“事件”包括用戶的行為和數據模型上的改變。

          在最初的JSP網頁中,像數據庫查詢語句這樣的數據層代碼和像HTML這樣的表示層代碼混在一起。經驗比較豐富的開發者會將數據從表示層分離開來,但這通常不是很容易做到的,它需要精心地計劃和不斷的嘗試。MVC從根本上強制性地將它們分開。盡管構造MVC應用程序需要一些額外的工作,但是它帶給我們的好處是毋庸置疑的。

          首先,多個視圖能共享一個模型。如今,同一個Web應用程序會提供多種用戶界面,例如用戶希望既能夠通過瀏覽器來收發電子郵件,還希望通過手機來訪問電子郵箱,這就要求Web網站同時能提供Internet界面和WAP界面。在MVC設計模式中,模型響應用戶請求并返回響應數據,視圖負責格式化數據并把它們呈現給用戶,業務邏輯和表示層分離,同一個模型可以被不同的視圖重用,所以大大提高了代碼的可重用性。

          其次,控制器是自包含(self-contained)指高獨立內聚的對象,與模型和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。例如,把數據庫從MySQL移植到Oracle,或者把RDBMS數據源改變成LDAP數據源,只需改變控制器即可。一旦正確地實現了控制器,不管數據來自數據庫還是LDAP服務器,視圖都會正確地顯示它們。由于MVC模式的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的少互擾性的構件。

          此外,控制器提高了應用程序的靈活性和可配置性?刂破骺梢杂脕磉B接不同的模型和視圖去完成用戶的需求,也可以構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇適當的模型機型處理,然后選擇適當的的視圖將處理結果顯示給用戶。

          2. Hello world 之 ASP.NET MVC 3

          如果還沒有開發環境,先在這里下載Visual Studio 2010和mvc3. 新建一個MVC3項目,選擇Razor模板引擎。VS已經建好了基本的目錄結構和兩個默認的頁面。

        image  查看下文件的代碼,可以看到Controllers中的類是處理一些邏輯過程,最終返回View用來生成頁面。Model中的代碼表示的是數據和一些基本的驗證規則,View通過Model中的數據來填充。運行下程序,可以看到一個基本的網站。MVC網站的運行過程是這樣的:

          1. 當第一個請求從客戶端發起的時候,首先執行的是Global.asax中的Application_Start()方法來完成一些初始化工作,其中重要的一步是RegisterRoutes方法,這個方法指定了如何將url映射到具體的方法上,稍后詳解。

          2. 根據第一步中指定的映射表生成一個RouteData對象,利用這個對象來創建一個RequestContext對象。

          3. MvcRouteHandler創建一個MvcHandler,并將RequestContext對象傳給MvcHandler。

          4. MvcHandler對象利用RequestContext對象確定一個IControllerFactory對象來創建Controller對象。

          5. MvcHandler對象調用Controller對象的Execute()方法。

          6. Controller的ControolerActionInvoker對象決定調用controller的哪個具體的action方法。

          7. Action方法接受用戶參數,執行方法,返回一個Result類型的對象。

          右擊Controller文件夾,新建一空Controller,命名為HelloWorld,將代碼改為如下:

        public class HelloWorldController : Controller
        { 
            
        public string Index()
            {
                
        return "Hello world";
            }

            
        public string Hello()
            {
                
        return "Hello everyone";
            }

            
        public string Hello2(string name)
            {
                
        return "Hello to you " + name;
            }
        }

          運行網站,在瀏覽器中分別訪問 /Helloworld,/Helloworld/hello,/HelloWorld/Hello?name=jack,可以看到相應的字符串顯示。這個例子展示了url是如何映射到具體的方法上的。通常,我們并不直接在Controller中返回字符串,而是返回一個View,再新建一個HelloController,不修改代碼,直接在瀏覽器中訪問/hello:

        image  這是因為我們新建了Controller但沒創建相應的View,ASP.NET會按照一定的路徑去尋找View文件。在Index方法上右擊,選擇新建View:

        image  然后會彈出如下對話框:

        image  在此填入View的名字,選擇視圖引擎,每一種視圖引擎支持一種視圖語法,MVC3支持多種模板語法,可以通過不同的視圖引擎來擴展實現。ASP.NET MVC早先使用的視圖引擎是和asp.net的webform一樣的。Razor引擎是MVC3新加入的引擎,還有一些開源的引擎可以用,例如NDjango就實現了類型Django的模板語法。在這個例子中選擇Razor引擎。最下面可以選擇一個MasterPage,這個和webform的母版頁的概念是一樣的,使用默認的_viewstart頁面就可以。

          在新建的視圖文件中寫下一行html代碼:

        @{
            ViewBag.Title = "Index";
        }
        <h2>Hello My First View</h2>

          運行網站,訪問/hello頁面:

        image  其中ViewBag是一個dynamic類型的對象,可以用來在controller和頁面之間傳遞數據。將Controller的代碼改為:

        public ActionResult Index()
        {
            ViewBag.Count 
        = 4;
            
        return View();
        }

          視圖頁面的代碼改為:

        @{
            ViewBag.Title = "Index";
        }

         
        <h2 >Hello My First View </h2 >
         
        <ul >
        @for (int i = 0; i  
        < ViewBag.Count; i++)
        {
             <li 
        >Hello @i </li >
        }
         
        </ul >

        image  接下來來實現一個基本的增刪改的功能。假設我們要對電影的基本信息進行管理,首先需要定義一個Model類型,新建一個Model,代碼如下:

        namespace HelloWorld.Models
        {
            
        public class Movie
            {
                
        public int ID { 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 : DbContext
            {
                
        public DbSet<movie> Movies { get; set; }
            }
        }

          接下來,我們新建一個Movie的Controller,使用EntityFramework來存取數據,如下配置:

        image  點擊Add后,可以看到一個具備基本功能的Controller已經建好。在View中,相應的CRUD頁面也已經有了。我們還需要配置下數據庫連接,在web.config中添加連接串的信息:

        image  此時數據庫和Movie表都還沒有,不過沒有關系,我們使用的 Entity Framework 4 的 Code First Development,它只需要一個平凡的類就可以了,EF會幫你完成創建數據庫和數據庫表的工作。運行網站,效果如下:

        image  打開SQL Sever,可以看到Movie表:

        image  如果Model文件發生了變化,例如添加了一個字段:

        public class Movie
        {
           
        public int ID { get; set; }        
           
        public string Title { get; set; }
           
        public DateTime ReleaseDate { get; set; }
           
        public string Genre { get; set; }
           
        public decimal Price { get; set; }
           
        public string Rating { get; set; }
        }

          再運行下程序,就會發生錯誤:

        image  錯誤消息提示說數據庫在model建立之后已經發生了變化,要解決有兩種方案,一是調用Database.SetInitializer方法來自動重建數據庫,二是手動修改數據庫表。第一種方法雖然簡單但是會導致已有的數據丟失,他會重建整個數據庫。但是在開發初期非常適合使用。在這里先采用第一種方案。具體方法是,在model中新建一個類繼承自DropCreateDatabaseIfModelChanges類。在其中可以加上可選的初始化數據的代碼,代碼如下:

        using System;
        using System.Collections.Generic;
        using System.Data.Entity;

        namespace HelloWorld.Models
        {
            
        public class MovieInitializer : DropCreateDatabaseIfModelChanges
            {
                
        protected override void Seed(MovieDBContext context)
                {
                    var movies 
        = new List<movie> {   
                         
        new Movie { Title = "When Harry Met Sally",   
                                     ReleaseDate
        =DateTime.Parse("1989-1-11"),   
                                     Genre
        ="Romantic Comedy",  
                                     Rating
        ="R",  
                                     Price
        =7.99M},  

                             
        new Movie { Title = "Ghostbusters ",   
                                     ReleaseDate
        =DateTime.Parse("1984-3-13"),   
                                     Genre
        ="Comedy",  
                                      Rating
        ="R",  
                                     Price
        =8.99M},  
                     };
                    movies.ForEach(d 
        => context.Movies.Add(d));
                }
            }
        }

          然后在Global.asax中將這個對象注冊下:

        protected void Application_Start()
        {
           System.Data.Entity.Database.SetInitializer(
        new HelloWorld.Models.MovieInitializer());
           
        //其余不變
        }

          再運行下程序,有可能會遇到這個錯誤:

          "This operation requires a connection to the 'master' database. Unable to create a connection to the 'master' database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection."

          我在這里找到了解決方法。需要把鏈接字符串中的Persist Security Info=true加上。然后程序就能正常運行了。運行之后,View頁面并不會自動跟著改變,需要手動修改。修改完成后,看一下編輯頁面:

        image  這時候可以更新Rating字段。編輯頁面還自帶驗證功能,不過是英文的,下面我們會改進這個驗證功能。

        獲得更多 -> 編程技巧 -> NET編程技巧
        技術支持

        責任編輯: webmaster >>> 百度上搜索  谷歌上搜索

        hugesky
        點擊復制本連接 (http://www.walela49.com/showarticle.php?id=3103)

        發送到郵件  轉換為打印版本  投 發表文章  報 侵權報告  關 關閉窗口
         一些很酷的.Net技巧
         ASP.NET MVC 入門介紹 (下)

        >>> 相關資訊:

        • . IT薪資.2014年IT的工資(轉載)
        • . 實現VB與EXCEL的無縫連接
        • . SQLServer中常用SQL語句
        • . 幾個大型網站提供的IPAPI接口調用方法
        • . SQLSERVER中大批量導入導出數據
        • . 輕松實現SQLServer與Access、Excel數
        • . 點擊輸入框顯示驗證碼
        • . 利用SQLServer的DTS操作EXCEL、Acces
        • . VB連接SQL數據庫示例
        • . SQL數據庫增刪改查基本語句
        【聲明】:
        以上文章或資料除注明為電腦技巧原創或編輯整理外,均為網絡收集整理或網友推薦。以上內容以共享、參考、研究為目的,不存在任何商業目的。
        未注明作者或出處的文章,可能資料來源不規范。如有涉及版權請給予及時聯系更正或予以刪除。
        評論:(開放)

          網友評論: 評  
        以下網友評論只代表網友個人觀點,不代表本站觀點
          發表評論:(匿名用戶不能發表評論! 注冊 登陸)
        昵稱: 驗證碼:
        評分:
        5 4 3 2 1
        內容:
          請文明參與討論,禁止漫罵攻擊。
         
        ·用戶發表意見僅代表其個人意見,并且承擔一切因發表內容引起的糾紛和責任.
        ·本站管理人員有權在不通知用戶的情況下刪除不符合規定的評論信息或留做證據.
        ·請客觀的評價您所看到的資訊,提倡就事論事,杜絕漫罵和人身攻擊等不文明行為.
        內容搜索
          • 站內搜索
        熱門資訊
        • 電腦快捷鍵全都在這了!電腦技巧...
        • 圖說最常用的10個電腦技巧
        • 別說你不會?這9個電腦技巧你必須...
        • Win7解決C盤占用空間大的方法
        • 網銀密碼設置小技巧
        • win7安裝AHCI驅動
        • 平板電腦選購六大要點
        • [推薦]五步搞定電腦網絡安全 五步...
        • 系統自帶的最不起眼但又是最強的...
        • 上班族必懂的電腦技能技巧
        推薦信息
        開啟模板:NEWSKY -關于版權 - 隱私保護 - 聯系我們 - 網站地圖 - 會員列表 - 加入收藏 - 返回頂部

        我問佛:如何才能如你般睿智? 佛曰:佛是過來人,人是未來佛。
        部分資源收集于互聯網并遵循 署名-非商業性使用-相同方式共享3.0共享,盡量署名原創。
        據《信息網絡傳播權保護條例》 如侵犯您的權利,請聯系webmaster(at)hugesky.com刪除。
        Power By HugeSky.Com

        Copyright© www.walela49.com
        Powered by HUGESKY CMS 7.1.1.1080918 professional licensed

        多乐彩