(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)处理流程segmentfault
在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)。架构
(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的验证机制,更安全高效;
缺点: 学习成本高,结构复杂,对未变化数据的没必要要的频繁访问,也将损害操做性能。
(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}便可。
(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