1. 什么是ASP.Net MVC

  ASP.Net MVC是一种开发Web应用程序的工具(is a web application development framework),采用Model-View-Controller即模型-视图-控制器的模式来构建    Web应用程序,强调分层即各部分的分工,每个部分有各自的职责,而不相互替代。

2. ASP.Net MVC来源

  很久之前,人们有开发基于Winodw的Web应用程序的需求,于是微软开发出了下列的几个产品:ASP、ASP.NET Web Forms、ASP.NET MVC   
  ASP即Active Server Page是一种脚本语言,它的代码Code与网页标记Markup放在了一个文件中,这样带来了代码复用率的问题、代码与标记没有分离不能更好的分工,即只是注重代码或只是注重标记,也不能很好的利用面向对象编程。
  ASP.NET Web Forms即ASP.NET 窗体应用程序,它采用了Code-Behind的形式,前端是Html标记后台是服务器端代码,解决了ASP中的问题。ASP.NET 窗体应用程序现在在被广大的.NET开发人员所使用,然而仍然有不足,在开发ASP.NET 窗体应用程序时,大量使用到了HTML、JavaScript、CSS,由于这个问题,导致我们不能集中精力的去解决业务逻辑问题。
  ASP.NET MVC就此产生,它采用Model-View-Controller即模型-视图-控制器的模式来构建Web应用程序,将应用程序分为了三个层次:Model层、View层、Controller层。各自有自己的职责,实现了分工。

3. 运行机制

  请求过程:Request -->Routing --> Handler -->Controller --> Action --> View --> Response (如下图) 
  发送请求-->路由选择(Routing)-->控制器-->视图,其中控制器是从模型中得到数据的。
  示例:HelloWorldBareBone(只是Controller不用View与Model)
  示例:HelloWorldBareBone2(Controller+View,没用Model)
  示例:HelloWorldBareBoneUsingModel(三者全部用到)

  

  英文解释

  1. Request comes into ASP.NET
  2. ASP.NET Routing finds the route match by calling RouteCollection.GetRouteData
  3. This in turn calls RouteBase.GetRouteData on each route until it finds a match
  4. The IRouteHandler for the matching route has its GetHttpHandler method called
  5. The MvcHandler runs (ProcessRequest is called)
  6. The MVC controller factory locates and creates the controller in CreateController
  7. The ControllerActionInvoker determines which action to run in InvokeAction
  8. The AuthorizationFilter stage executes (this includes the authorization method on the controller itself)
  9. The ActionExecuting stage executes
  10. The requested action method is executed
  11. The ActionExecuted stage executes
  12. If there is a result object then the ResultExecuting stage executes
  13. If the result wasn't cancelled then the ActionResult's ExecuteResult method is executed
  14. The ResultExecuted stage executes
  15. If an error occured then the Exception stage executes

4. 路由Route

  客户端发出请求,首先路由要对URL地址进行解析,路由就是一个URL匹配系统,路由里面定义了URL的请求形式,如果URL地址符合这个形式,就会进行下一步处理,如果没有匹配的形式就会报错。在路由中可以定义多个匹配形式。
  路由中URL形式的注册是通过RegisterRoutes方法(如下)实现的,在MVC 3中这个方法在Global.asax文件中。在MVC 4中,这个方法在App_Start文件夹下的RouteConfig.cs文件中。这个RegisterRoutes方法会在Application_Start()方法中被调用,也就是说程序刚运行的时候,就会注册。

 public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
   new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}

  程序中会有一个默认的路由,Default是路由的名称,{controller}/{action}/{id}是这个路由可以匹配的URL格式,如果你输入的是 Home/Index/23,那么程序就会执行Home控制器中的Index方法,并且id=23,如果你输入的是User/Edit/23,那么程序就会执行User控制器中的Edit方法,并且id=23 ,当然,并不是每个都要赋值,这时候也就用到了默认值,上面定义的默认值是,默认是Home控制器,执行的是它的Index方法。

4. Model-View-Controller 模式

  这种模式将应用程序分为了三个层次:Model层、View层、Controller层。实现了职责的分工,各自只需负责自己的工作,不需相互关心。即我们常说的“低藕合”。由于各个层次独立了开来,所以可以进行单独的开发与维护,还有利于测试。

Model(模型)

  它包含着业务逻辑与数据构成,代表着实体,封装着实体的属性与方法。

View(视图)

  视图负责将模型中的数据展示出来,一般是以网页的形式来展示,然而还有更多的形式,比如:PDF、XML、电子表格。视图只是用来展示数据,不包含任何的业务逻辑。

Controller(控制器)

  是Model与View的桥梁,负责将Model中的数据传递给View。它控制程序的处理逻辑。客户端的请求经路由解析之后,如果匹配成功,就会调用Controller控制器中的方法。
  以HelloWorldBareBoneUsingModel为例:如果用户输入的URL是Home/Index,且匹配默认的路由,那么之后就会调用HomeController中的Index方法(如下)。

public ActionResult Index()
{
Country oCuntry = new Country { CountryCode = "", CountryName = "India" };
return View(oCuntry);
}

  控制器方法要求返回一个ActionResult,上面返回了一个 View(oCuntry),这个是ViewResult类型的,ViewResult是ViewResultBase的子类,而ViewResultBase是ActionResult的子类。父类对象引用子类实例,这是可以的。同理,它还可以返回ContentResult、FileResult、HttpNotFoundResult、JavaScriptResult、JsonResult、PartialViewResult、RedirectResult,加上ViewResult,此外,还可以进行重定向。下面说一下,返回这些类型使用的方法。

返回类型 ViewResult ContentResult FileResult HttpNotFoundResult JavaScriptResult JsonResult PartialViewResult RedirectResult 重定向到一个方法 重定向到一个路由
使用方法 View() Content() File() HttpNotFound() JavaScript() Json() PartivalView() Redirect() RedirectToAction() RedirectToRoute()

  示例:ActionResultDemo

ASP.NET MVC 学习笔记 1的更多相关文章

  1. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  2. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  3. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  4. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  5. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  6. ASP.NET MVC 学习笔记(1)

    从头开始系统地学习ASP.NET MVC 为什么要学习ASP.NET MVC?原因很多,可以先来看一下最早的ASP.NET WebForm的一些缺点: 传说中面试经常要问到的ASP.NET WebFo ...

  7. 【转】ASP.NET MVC学习笔记-Controller的ActionResult

    1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome ...

  8. ASP.NET MVC学习笔记-----使用自定义的View Engine

    我们都知道在ASP.NET MVC中自带了Razor View Engine,Razor十分的强大,可以满足我们绝大部分的需要.但是ASP.NET MVC的高度可扩展性,使我们可以使用自定义的View ...

  9. ASP.NET MVC学习笔记-----ActionInvoker

    还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NET MVC提供的基类Cont ...

随机推荐

  1. 团队作业8----第二次项目冲刺(Beta阶段) 第二天

    BETA阶段冲刺第二天 1.开了个小会议 2.每个人的工作 (1) 昨天已完成的工作: 昨天把学生的登录功能完善了并且优化了下界面 (2) 今天计划完成的工作: (3) 工作中遇到的困难: 1.团队还 ...

  2. 201521123091 《Java程序设计》第14周学习总结

    Java 第十四周总结 第十四周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 以你喜欢的方式(思维导图或其他) ...

  3. 201521123065《java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 1.Map通过get(key)来获取值: 2.HashMap和Hash ...

  4. 201521123014 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. GUI与Sw ...

  5. java课程设计--WeTalk(201521123076)

    在线群聊系统 1,团队课程设计博客链接 http://www.cnblogs.com/slickghost/p/7018105.html 个人负责模块或任务说明 负责模块:总体设计及主要聊天功能实现 ...

  6. Could not chdir to home directory /home/USER: Permission denied

    Could not chdir to home directory /home/USER: Permission denied  2 years ago davidzhang We changed t ...

  7. Servlet第四篇【request对象常用方法、应用】

    什么是HttpServletRequest HttpServletRequest**对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,**HTTP请求头中的所有信息都封装在这个对象中,开发人 ...

  8. 【漏洞公告】CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞

    2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...

  9. postman安装使用教程---图文讲解

    一.安装postman 1,安装包安装 官网下载地址:https://www.getpostman.com 选择好对应的版本下载,下载完后直接安装 2,插件包安装 可以在谷歌的应用商店里面找到,或者在 ...

  10. OC——关于KVC

    我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方 ...