ASP.NETMVC知识讲解-------XX1、什么是MVC?MVC由TrygveReenskaug提出,是“Model-View-Controller”的缩写,中文翻译为“模式-视图-控制器”。MVC很好地实现了数据层与表示层的分离。MVC通常用于分布式应用系统的设计和分析中及确定系统各部分间的组织关系。MVC把交互系统的组成分解成模型、视图、控制器三种部件。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示更新。这实际上是一种模型的变化-传播机制。1、什么是MVC?①控制器(Controller):控制器类处理客户端向Web应用程序发出的请求,获取数据,并指定返回给客户端,用来显示处理结果的视图。②视图(View):视图类是Web应用程序中用来生成并显示HTML格式的服务器端对客户端请求的响应结果的模板文件。③模型(Model):模型类代表了应用程序的数据,这些数据通常具有一个数据验证逻辑,用来使得这些数据必须符合业务逻辑。2、MVC的两种分离View和数据(Model)分离–能够为相同的Model开发不同的View进行展示–分离可视与不可视得组件,能够对Model进行独立测试(只有View到Model的单向引用)•View和表现逻辑(Controller)分离–分离逻辑与具体展示,能够对逻辑进行独立测试(只有Controller到View的单向引用)3、MVC各部分之间关系4、mvc详细请求流程5、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类型的对象。6、ASP.NETMVC特点开放源代码到处可以扩展ViewEngine、HtmlHelper还有FilterViews,Controllers,Models,Routes基于ASP.NET,充分利用ASP.NET现有特性完善的单元测试支持轻量级,主体代码仅数千行优点:原生态urlrouting,便于urlrewriteControl与View完全分离,利于换肤且没有性能损失便于对输出的html做完全的控制,利于精简代码及SEO表现层的性能可以优化到极致应用asp.net的master及去除控件的运行时特性,使用vs开发时将可以使用设计视图缺点:开发人员需要花时间熟悉这个新技术现有代码移植到mvc需要一定时间开发人员需要熟悉html以及css、JavaScript开发人员需要摆脱在WebForm开发时对服务器控件种种依赖7、MVC优缺点8、URLROUTING和URLHELPERURL模式路由规则路由表UrlHelper.Action职责解析URL,得到RouteData、Controller、Action,转交给Controller处理使用Url.Action方法根据Controller和Action,反向生成对应的URL9、CONTROLLER与VIEWController职责从Model获取数据,然后通过ViewData传递给View数据可以使用不同的View呈现数据ActionResult的其它返回值:JsonResult、RedirectResultPartialView、View方法ViewData、TempData传值过滤器Filter10、VIEWDATA和TEMPDATA区别ViewData只能在当前Action中有效;TempData可以类似于Session一样到其它页面仍然存在,它的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除;TempData一般用于临时的缓存内容或抛出错误页面时传递错误信息。11、创建一个MVC项目创建一个MVC项目12、几个简单的问题(1)MVC与三层架构的比较。(2)EF对数据操作和数据持久化的三种方式。(3)改变数据库中表的行,如何解决模型与数据库结构的不统一。13、MVC与三层架构的比较14、两种方法来解决1、让EntityFramework自动删除当前数据库,DbDatabase.SetInitializer();(DropCreateDatabaseIfModelChanges)并在新的模型类的基础上重新创建该数据库。这种方法在使用一个测试数据库时对于开发来说是十分方便的,因为它允许你快速地同步修改模型与数据库。但缺点是你将丢失现存库中的数据(所以请不要将这个方法使用在实际使用中的数据库上)。2、修改数据库中的数据表的结构来使之与模型相匹配。这个方法的好处是可以让你保留表中的数据。谢谢!