Asp.Net MVC基础

  1. MVC是什么?

  MVC是Model-View-Control的简称,它是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,它强制性的使应用程序的输入、处理和输出分开,使MVC应用程序被分成三个核心部件:模型(Model)、视图(View)、控制器(Controller)。它们各自处理自己的任务。其中,

    Model:用于存储数据的组件。

    View:根据Model数据进行数据内容展示的组件。

    Control:接受并处理用户指令。操作Model,选择一个合适的View并输出内容。   

  MVC强制性的把web应用程序分成M V C 3个部分,由于各个部分相对独立,大大降低了程序的耦合性,更利于web项目的分工协作开发,也提高了程序的可测试性。同时多个View可以共享一个Model,从而提高了程序的可重用性和可适用性。  

2010071621411336.jpg

 

 

  2. Asp.Net MVC 项目中这3个部件被放在哪里?

  在Visual Studio中创建一个MVC Project 就一目了然了。

2010071622284297.jpg

 

  3. Asp.Net MVC中的Controller是怎么选择Model和View的呢?

  当一个URL请求来到时,asp.net mvc handler会把它交给一个Controller,Controller从数剧源得到一些数据,并运用业务逻辑规则得到一个Model,再把这个Model传递给View,通过View把页面呈现给用户。

  每个controller类中都有一些返回值是ActionResult的Method,这些Method被称作Action。Mvc Handler会根据请求的URL选择一个相应的controller/action来执行。在action中,我们从数据源取得一些数据,并根据业务规则得到一个Model,并在action里面执行code:ViewData.Model = myModel;,这样这个Model就会被保存在返回的ActionResult里,然后ActionResult.ExecuteResult()方法被执行。

  在ExecuteResult方法中,调用IViewEngine.FindView()来得到一个ViewEngineResult,这里ViewEngineResult.View(IView对象)一般代表一个具体的页面,如一个.aspx页面。调用ViewEngineResult.View.Render(new ViewContext(...,ViewData,...))方法,就可以把含有Model的View展示给用户了。

  既然Asp.Net Mvc中抽象除了IView 和 IViewEngine这2个接口,那么我们就可以自己实现这2个接口。这样IView除了可以和磁盘上的.aspx文件对应外,还可以代表一个.txt文件,或者.pdf文件,或者...,只要我们实现了IView.Render()就行了。对于IViewEngine,只需要实现IViewEngine.FindView()就行了,于是我们就有了改变具体文件存放路径的权利了。

 

  4.请求是怎么被交给Mvc Handler的呢?又是怎么选择正确的action的呢?

  我们可以看一下Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config文件,里面配置了一个叫UrlRoutingModule的HttpModule。在asp.net mvc project 中,这个module会在asp.net管道的PostResolveRequestCache事件中生成MvcHandler,并用他代替默认的asp.net handler来处理请求。

  选择action的关键点在Global.asax.cs文件中。里面有一个方法RegisterRoutes(RouteTable.Routes),RouteTable中存放的是一些路由规则,MvcHandler正是根据他们来匹配URL和Controller/Action的。

 

下面是一篇博客中总结的asp.net mvc的执行流程:

链接:张子秋的博客 http://www.cnblogs.com/zhangziqiu/archive/2009/03/11/Aspnet-MVC-3.html

 =============================================================================================

1. 页面处理流程

发送请求 –> UrlRoutingModule捕获请求 –> MvcRouteHandler.GetHttpHandler() –> MvcHandler.ProcessRequest()

2.MvcHandler.ProcessRequest() 处理流程:

使用工厂方法获取具体的Controller –> Controller.Execute() –> 释放Controller对象

3.Controller.Execute() 处理流程

获取Action –> 调用Action方法获取返回的ActionResult –> 调用ActionResult.ExecuteResult() 方法

4.ActionResult.ExecuteResult() 处理流程

获取IView对象-> 根据IView对象中的页面路径获取Page类-> 调用IView.RenderView() 方法(内部调用Page.RenderView方法)

通过对MVC源代码的分析,我们了解到Controller对象的职责是传递数据,获取View对象(实现了IView接口的类),通知View对象显示.

View对象的作用是显示.虽然显示的方法RenderView()是由Controller调用的,但是Controller仅仅是一个"指挥官"的作用, 具体的显示逻辑仍然在View对象中.

==========================================================================================

 

  5. Asp.net MVC ActionFilter

  ActionFilter是MVC在action执行前后提供扩展的功能(在这里是一个AOP的概念),它可以用在页面压缩、缓存、错误处理等。ActionFilter需要继承自ActionFilterAttribute抽象类,并且覆盖需要使用的方法。 ActionFilterAttribute类中有四个可重的方法,分别是OnActionExecuting, OnActionExecuted, OnResultExecuting 和 OnResultExecuted。

  参见:(asp.net mvc学习)ASP.NET MVC ActionFilter的学习与使用

      6. System.Web.Mvc.HtmlHelper 和 System.Web.Mvc.UrlHelper

  参见: (asp.net MVC学习)System.Web.Mvc.HtmlHelper学习及使用  和 (asp.net MVC学习)System.Web.Mvc.UrlHelper的学习与使用

 

一些讲解 asp.net mvc的博文:

http://www.cnblogs.com/firstyi/archive/2008/05/08/1188545.html

http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/ASPNET-MVC-1.html

http://www.cnblogs.com/longgel/category/237654.html

http://www.cnblogs.com/chsword/archive/2008/03/10/dotnetmvcframework.html

 

 

转载于:https://www.cnblogs.com/evan_9/archive/2010/07/17/1779320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值