ASP.Net MVC開發基礎學習筆記:1、走向MVC模式

1、ASP.Net的兩種開發模式

1.1 ASP.Net WebForm的開發模式

webform

  (1)處理流程html

  在傳統的WebForm模式下,咱們請求一個例如http://www.aspnetmvc.com/blog/index.aspx的URL,那麼咱們的WebForm程序會到網站根目錄下去尋找blog目錄下的index.aspx文件,而後由index.aspx頁面的CodeBehind文件(.CS文件)進行邏輯處理,其中或許也包括到數據庫去取出數據(其中的通過怎樣的BLL到DAL這裏就不談了),而後再由index.aspx頁面來呈現給用戶。程序員

  綜上所述,在WebForm模式下:一個URL請求的是在服務器與該URL對應路徑上的物理文件(ASPX文件或其餘),而後由該文件來處理這個請求並返回結果給客戶端。web

  (2)開發方式數據庫

  • 服務器端控件
  • 通常處理程序+Html靜態頁+Ajax
  • 通常處理程序+Html模板引擎

1.2 ASP.Net MVC的開發模式

aspnet mvc

  (1)處理流程segmentfault

  在ASP.Net MVC中,客戶端所請求的URL是被映射到相應的Controller去,而後由Controller來處理業務邏輯,或許要從Model中取數據,而後再由Controller選擇合適的View返回給客戶端。再說回前面咱們運行的ASP.NET MVC程序訪問的http://www.aspnetmvc.com/Home/Index這個URL,它訪問的實際上是HomeController中的Index這個Action。安全

  (2)顯著特色服務器

  • 2009年第一個開源項目版本發佈,至今已過去5年,發展逐漸完善
  • 更加簡潔,更加接近原始的「請求-處理-響應」
  • 更加開發、更多的新的特色、社區活躍
  • 不會取代WebForm
  • 底層跟WebForm都是同樣的,只是管道上不一樣的處理而已

2、MVC模式的兩種不一樣解讀

  MVC 模式兩種理解:一種是 表現模式,另一種是 架構模式。它將應用程序分紅三個主要組件即:視圖(View)、控制器(Controller)和模型(Model)。如今,咱們來看看M-V-C分別表明什麼?
   M:Model 主要是存儲或者是處理數據的組件;Model實際上是實現業務邏輯層對實體類相應數據庫操做,如:CRUD。它包括數據、驗證規則、數據訪問和業務邏輯等應用程序信息。(補充:ViewModel:視圖模型)

  V:View 是用戶接口層組件。主要是將Model中的數據展現給用戶。aspx和ascx文件被用來處理視圖的職責;數據結構

   C: Controller 處理用戶交互,從Model中獲取數據並將數據傳給指定的View;
  (1)MVC做爲架構模式的理解
  做爲架構模式時,View的職責就是負責展現數據,而Controller則負責獲取View傳遞來的數據,而後調用業務邏輯層處理完成的數據傳遞給View進行展現。而Model則處理業務邏輯,並把結果返回給Controller。從傳統三層架構上來看,View和Controller都屬於UI層,而Model則橫跨BLL與DAL層。
  (2)MVC做爲表現模式的理解
  (3)MVC架構模式綜合模型

  能夠看出,對於MVC的兩種不一樣理解的區別就在於對於Model的理解上:將Model做爲業務模型(BLL、DAL等)仍是做爲視圖模型(ViewModel)架構

3、WebForm vs MVC

comparation

  (1)WebFormmvc

  優勢: 1.提供了大量的服務器端控件,能夠實現快速開發;

     2.ViewState回傳數據很方便;

     3.學習成本低;

   缺點: 1. 封裝太強,雖然學習成本低,不少底層東西讓初學者不是很明白;

      2. 自定義控制不靈活,不利於美工和開發人員的配合,每每那些服務器控件處理稍有不慎就會致使出錯;

      3. ViewState在頁面中的傳遞會形成大量的流量消耗;

TIP:有關WebForm的服務器控件和ViewState的詳細介紹,不瞭解的朋友能夠閱讀另外一篇博文《ASP.Net WebForm學習筆記:aspx與服務器控件探祕》。

  (2)MVC

  優勢: 1.很容易將複雜的應用分紅Model(ViewModel)、View、Controller三個組件模型,將處理後臺邏輯代碼與前臺展現邏輯進行了很好的分離,屬於鬆耦合關係,在大項目應用中,更易於敏捷開發與測試驅動開發,有很強的可擴展性;

     2.由於沒有服務器端控件,因此程序員控制的會更加靈活,頁面更加乾淨,沒有ViewState;

     3.經過修改路由規則,能夠控制生成自定義的url,所以控制生成SEO友好的URL將更加容易;

     4.強類型View實現、Razor視圖、Model綁定機制、Model的驗證機制,更安全高效;

   缺點: 學習成本高,結構複雜,對未變化數據的沒必要要的頻繁訪問,也將損害操做性能。

4、第一個ASP.Net MVC程序

4.1 新建項目後的文件組織結構

  (1)新建一個ASP.Net MVC 4項目,選擇「基本」配置與「ASPX」視圖引擎(暫時不用Razor引擎)。

  (2)VS爲咱們生成的基本文件組織結構以下圖所示:

  能夠看出,VS默認幫咱們建立好了Models、Views以及Controllers的三個文件夾,這三個文件夾就構成了咱們的ASP.Net MVC模式的項目。其中,Controllers是全部控制器的類文件所在,而Models則是全部模型的類文件所在,而Views則是全部cshtml或aspx的文件所在。

4.2 控制器的「約定大於配置」

  在Controllers中新建一個控制器,取名爲HomeController。在默認的Index這個Action中新建一個視圖,默認名爲Index便可。

  (1)Controller放到controllers文件夾中,而且 命名方式以Controller結尾
  (2) 每一個Controller都對應View中的一個文件夾,文件夾的名稱跟Controller名相同
  (3)Controller中的方法名都對應一個View視圖(非必須,可是建議這麼作)並且 View的名字跟Action的名字相同
  (4)控制器必須是非靜態類,而且要實現IController接口
  (5)Controller類型能夠放到其餘項目中

4.3 視圖的相關約定

  (1)全部的視圖 必須放到Views目錄下
  (2)不一樣控制器的視圖用文件夾進行分割, 每一個控制器都對應一個視圖目錄
  (3)通常視圖名字跟控制器的Action相對應(非必須)
  (4)多個控制器 公共的視圖放到Shared:例如公用的錯誤頁、列表模板頁、表單模板頁等等;

4.4 數據傳遞的橋樑-ViewData與ViewBag

  首先,ViewData是一個 Key/Value對的字典集合數據結構,用於在Controller和View之間構建起傳遞數據的橋樑。
  (1)ViewData是Controller的屬性, 此屬性是繼承ControllerBase而來
  (2)ViewPage下也有一個ViewData的一個屬性
  (3)控制器的Action方法執行完成後,返回ViewResult,而後MVC框架在執行ExcuteResult方法時,Controller中的ViewData數據會傳遞給ViewPage類,其實就是 把Controller的ViewData賦值給ViewPage頁面的ViewData屬性
  (4) ViewBag傳遞數據:咱們對ViewBag的動態屬性進行賦值, 值其實是存到了ViewData中,動態屬性的名存成了ViewDataDictionary的鍵,動態屬性的值存成了ViewDataDictionary的值。
PS:ViweBag實際上是就一個包含了一層Dynamic的ViewData,兩個兄弟共用的是一個容器。

  (5)ViewData與ViewBag的比較

ViewData ViewBag
它是Key/Value字典集合 它是dynamic類型對像
從Asp.net MVC 1 就有了 ASP.NET MVC3 纔有
基於Asp.net 3.5 framework 基於Asp.net 4.0與.net framework
ViewData比ViewBag快 ViewBag比ViewData慢
在ViewPage中查詢數據時須要轉換合適的類型 在ViewPage中查詢數據時不須要類型轉換
有一些類型轉換代碼 可讀性更好

  (6)如何在程序中使用ViewData與ViewBag

  ①在Controller中的代碼

        public ActionResult Index()
        {
            ViewData["Name"] = "Edison Chou";
            ViewBag.Name = "Edison Chou";
            return View();
        }

  ②在View中的代碼

<body>
    <div>
        <h1>Hi,ASP.Net MVC First Demo!</h1>
        <%
            for (int i = 0; i < 5; i++)
            {
                Response.Write("Hello World!<br/>");
            }
        %>
        <p><%: ViewData["Name"] %></p>
        <p><%: ViewBag.Name %></p>
    </div>
</body>

4.5 路由機制初步瞭解

  咱們經過調試能夠知道,在MVC中全部的請求都歸結到控制器下面的Action。因此,全部的請求都是要指定一個具體的Action,Url的格式是根據路由規則來定的。那麼,在ASP.Net MVC的路由規則默認又是什麼,在哪裏設置的呢?

public class RouteConfig
{
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
}

  打開App_Start文件夾,能夠找到RouteConfig這個類,查看RouteConfig這個類的方法,能夠知道原來是RegisterRoutes這個方法爲咱們的ASP.Net MVC項目設置了默認的路由規則:{controller}/{action}/{id},也就是說咱們能夠經過http://localhost/Home/Index/1這種URL來訪問項目。若是咱們想要改變默認的路由規則,例如咱們想要以這種URL:http://localhost/Home-Index-1來訪問項目,則直接將上面的默認路由規則改成:{controller}-{action}-{id}便可。

參考文章

(1)lulu Studio,《ASP.Net MVC入門:1-簡介》,http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html

(2)馬倫,《ASP.Net MVC基礎視頻教程》,http://bbs.itcast.cn/thread-26722-1-1.html

(3)深山老林,《正確認識WebForm與ASP.Net MVC》,http://www.cnblogs.com/wlb/archive/2009/12/07/1618954.html

(4)zhaojunpeng,《ViewData和ViewBag的那些事》,http://blog.segmentfault.com/zhaojunpeng/1190000000472818

 

相關文章
相關標籤/搜索