(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)開發方式數據庫
(1)處理流程安全
在ASP.Net MVC中,客戶端所請求的URL是被映射到相應的Controller去,而後由Controller來處理業務邏輯,或許要從Model中取數據,而後再由Controller選擇合適的View返回給客戶端。再說回前面咱們運行的ASP.NET MVC程序訪問的http://www.aspnetmvc.com/Home/Index這個URL,它訪問的實際上是HomeController中的Index這個Action。服務器
(2)顯著特色數據結構
V:View 是用戶接口層組件。主要是將Model中的數據展現給用戶。aspx和ascx文件被用來處理視圖的職責;架構
能夠看出,對於MVC的兩種不一樣理解的區別就在於對於Model的理解上:將Model做爲業務模型(BLL、DAL等)仍是做爲視圖模型(ViewModel)。mvc
(1)WebForm框架
優勢: 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的驗證機制,更安全高效;
缺點: 學習成本高,結構複雜,對未變化數據的沒必要要的頻繁訪問,也將損害操做性能。
(1)新建一個ASP.Net MVC 4項目,選擇「基本」配置與「ASPX」視圖引擎(暫時不用Razor引擎)。
(2)VS爲咱們生成的基本文件組織結構以下圖所示:
能夠看出,VS默認幫咱們建立好了Models、Views以及Controllers的三個文件夾,這三個文件夾就構成了咱們的ASP.Net MVC模式的項目。其中,Controllers是全部控制器的類文件所在,而Models則是全部模型的類文件所在,而Views則是全部cshtml或aspx的文件所在。
在Controllers中新建一個控制器,取名爲HomeController。在默認的Index這個Action中新建一個視圖,默認名爲Index便可。
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>
咱們經過調試能夠知道,在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}便可。