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 ...
随机推荐
- 201521123044 《Java程序设计》第8周学习总结
1. 本章学习总结 2. 书面作业 本题作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结(见注释) public static List<String> conv ...
- 201521123115《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123057 《Java程序设计》第2周学习总结
1. 本章学习总结 本周Java教学主要围绕Java的基本语法展开.在本周的学习中,我了解到了: -Integer的取值范围 -if...else条件式,switch条件式,while循环,break ...
- 201521123012 《Java程序设计》第二周学习总结
1. 本章学习总结 1.Java中String和StringBuilder的区别. 2.Arrays()的用法. 2.课后作业 1.使用Eclipse关联jdk源代码(截图),并查看String对象的 ...
- 201521123015 《Java程序设计》第2周学习总结
1.本章学习总结 (1)学习了枚举,数组等方法 (2)通过实验内容的讲解,解决了一些问题 (3)进一步运用和了解码云 书面作业 1.使用Eclipse关联jdk源代码,并查看String对象的源代码( ...
- 201521123064 《Java程序设计》第1周学习总结
1. 本章学习总结 1.了解Java与C/C++的区别,Java语言所写程序较为繁琐,C/C++较为简洁. 2.学会使用cmd进行程序的编译及运行. 3.学会利用JDK辅助Java编程. 4.使用ec ...
- 参考:Python 调试方法
地址:http://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ 这是Python代码调试技巧,也是我今天从别的地方看到的,然后转载 ...
- Maven第二篇【Idea下使用Maven】
详情可参照详细的Maven教程-Idea环境下 值得追加的是:在修改web.xml路径的时候,那篇博文并没有给出绝对的路径-这里可能有些人不知道怎么写.我给出来参考 X:\Users\ozc\Desk ...
- APPScan安装与使用教程
一.安装 1.右键安装文件,以管理员身份运行,如下图所示: 2.点击[确定] 3.点击[安装] 4.选择:我接受许可协议中单位全部条款,点击[下一步] 5.点击[安装]到该目录 6.如果需求扫描Web ...
- 你的专属定制——JQuery自定义插件
前 言 絮叨絮叨 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗 ...