ASP.NET MVC 学习笔记 1
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(三者全部用到)

英文解释
- Request comes into ASP.NET
- ASP.NET Routing finds the route match by calling RouteCollection.GetRouteData
- This in turn calls RouteBase.GetRouteData on each route until it finds a match
- The IRouteHandler for the matching route has its GetHttpHandler method called
- The MvcHandler runs (ProcessRequest is called)
- The MVC controller factory locates and creates the controller in CreateController
- The ControllerActionInvoker determines which action to run in InvokeAction
- The AuthorizationFilter stage executes (this includes the authorization method on the controller itself)
- The ActionExecuting stage executes
- The requested action method is executed
- The ActionExecuted stage executes
- If there is a result object then the ResultExecuting stage executes
- If the result wasn't cancelled then the ActionResult's ExecuteResult method is executed
- The ResultExecuted stage executes
- 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的更多相关文章
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
- ASP.NET MVC学习笔记-----Filter(2)
接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 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 ...
- ASP.NET MVC 学习笔记(1)
从头开始系统地学习ASP.NET MVC 为什么要学习ASP.NET MVC?原因很多,可以先来看一下最早的ASP.NET WebForm的一些缺点: 传说中面试经常要问到的ASP.NET WebFo ...
- 【转】ASP.NET MVC学习笔记-Controller的ActionResult
1. 返回ViewResult public ActionResult Index() { ViewData["Message"] = "Welcome ...
- ASP.NET MVC学习笔记-----使用自定义的View Engine
我们都知道在ASP.NET MVC中自带了Razor View Engine,Razor十分的强大,可以满足我们绝大部分的需要.但是ASP.NET MVC的高度可扩展性,使我们可以使用自定义的View ...
- ASP.NET MVC学习笔记-----ActionInvoker
还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NET MVC提供的基类Cont ...
随机推荐
- 【Alpha】Daily Scrum Meeting——Day1
站立式会议照片 每个人的工作分配 成 员 今日计划完成的任务 胡丹丹 学习手机app开发的总体流程以及搭建APP开发所需要的安卓环境,加强Java语言的学习掌握 曾丽君 学习手机app开发的总体流程以 ...
- 201521123007《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题目4-1) private static ...
- 201521123074 《Java程序设计》第3周学习总结
1.本周学习总结 用百度脑图画了一张,点开图片全屏就可以看清楚了 脑图链接 2.书面作业 Q1.代码阅读 以下代码可否编译通过?哪里会出错?为什么?尝试改正? 如果创建3个Test1对象,有内存中有几 ...
- 201521123045 《JAVA程序设计》 第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- Exception in thread "main" org.hibernate.MappingException: You may only specify a cache for root
如果出现类似下面的错误: Exception in thread "main" org.hibernate.MappingException: You may only speci ...
- AngularJS指南文档
点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 核心概念 模板 在Angular应用当中,我们的工作就是将服务器的数据填充到客户端页面模 ...
- nodejs中http-proxy使用小结
最近在写xmocker的工具,用于开发前期的mock数据,不可避免的用到了代理的中间件.当然,github上有关于http-proxy封装的中间件.毕竟是自己练手的项目,就自己写了个中间件,方便定制功 ...
- TCP/IP(七)之玩转HTTP协议
前言 前面一篇的博文简单的介绍了一下属于应用层的HTTP协议,这一篇我将详细的学习HTTP协议,这也是做Web开发中一定要用到的协议.虽然我是做大数据的,但是多学习一点肯定是 没有坏处的.国庆放假7天 ...
- Beauty Contest 凸包+旋转卡壳法
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 27507 Accepted: 8493 D ...
- MySQL show status 参数详解
状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...