1:什么是MVC模式

         MVC(Model-View-Controller)是一种软件架构模式,把软件系统分为一下三个基本部分:



        控制器(Controller) :控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

这三部分基本的关系图:

c mvc架构图 mvc架构原理_直接访问

 

2:MVC基本原理

c mvc架构图 mvc架构原理_MVC_02

a:定位Controller:

                         在mvc中,客户端所请求的URL首先被映射到相应的Controller中,然后由Controller来处理业务逻辑,例如从Model中取数据,然后由Controller选择合适的View返回给客户端。如果我们的ASP.NET MVC程序访问的是http://localhost:2176/Home/Index,那么它访问的其实是HomeController中的Index这个Action.如下图:

 

c mvc架构图 mvc架构原理_直接访问_03

 

        其中 public ActionResult Index()这个方法称为Controller的Action,他返回的是ActionResult的类型。一个Controller可以有很多个Action。

b:返回View

         我们从前面的截图中看到,Controller中的Action方法中有个return View()的方法。默认情况下它会返回与Action同名的view.在ASP.NET MVC默认的视图引擎(WebFormViewEngine)下,view是按如下路径访问的:

/Views/{Controller}/{Action}.aspx

也就是说对于http://localhost:2176/Home/Index这个路径,在默认情况下,在Index这个Action中用return View()来返回view的时候,会去寻找/Views/Home/Index.aspx文件,如果找不到这个文件,就会去Share目录中寻找:/Views/Share/Index.aspx,如果都找不到,就会抛出找不到View的异常。

         这就是为什么如果我们直接访问Index.aspx的话会出现404的错误,因为在MVC整个数据传输机制里是不建议直接访问View的,我们可以在MVC程序Views目录下的默认配置文件里找到原因:

c mvc架构图 mvc架构原理_c mvc架构图_04

         也就是访问Views目录下的所有的文件都会由System.Web.HttpNotFoundHandler来处理。