之前自学了MVC的知识点,由于在工作中并未使用到。所以过久了就忘记一部分惹,再来从头小小的复习一下:
一。什么是MVC模式?
MVC(Model-View-Controller,模型-视图-控制器)模式其实 就是一种软件架构模式。
二。MVC和WebForm工作流程的区别(图片及内容来自http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html)
WebForm中,当User请求一个页面(例如http://www.51mvc.com/blog/index.aspx)时的工作流程如下:
从上图可以清晰的看到,WebForm程序会到网站根目录下去寻找blog目录下的Index.aspx文件,然后由index.aspx页面的CodeBehind文件(.cs文件)进行逻辑处理,而CodeBehind中或许包含到数据库去取出数据,然后再由Index.aspx页面来呈现给用户。
再来看MVC程序,当用户请求一个页面时(例如http://www.51mvc.com/blog/index.aspx),其工作流程:
从上图可以清晰的看到,在MVC中:
在客户端所请求的URL是被映射到相应的Controller去;
然后由Controller来处理业务逻辑,或许要从Model中取数据;
然后再有Controller选择合适的View返回给客户端。
例如我们运行ASP.NET MVC程序访问的http://localhost:62106/Home/Index这个URL,它访问的其实是HomeController中的Index这个Action,见下图:
那么,URL是怎么被定位到Controller中的呢?
---通过路由,而具体的URL会被路由到哪一个Controller中去,这些可以完全由我们自己定义。我们可以在Global.asax文件中去看一下:
那么,View又是怎么被返回客户端的呢?
---Controller中的Action方法中有个return View()的方法。默认请款下它返回与Action同名的View.在ASP.NET MVC默认的视图引擎(WebFormViewEngine)下,View是按照如下路径访问的:
/Views/{Controller}/{Action}.aspx
对于URL http://localhost:62106/Home/Index, 在默认情况下,在Index这个Action中用return View()来返回View的时候,会执行如下两步:
1. 去寻找Views/Home/Index.aspx文件;
2. 如果找不到Views/Home/Index.aspx这个文件,就会去Share目录中寻找:Views/Share/Index.aspx;
3. 如果都找不到,就会抛出找不到View异常。
但是,当我们直接去访问Views/Home/Index这个路径,它会出现404错误,说找你不到文件,Why?
---因为在MVC中,是不建议直接去访问View的,所以我们建立的ASP.NET MVC程序在默认情况下就在Views目录下加了一个Web.config文件,其中有如下内容:
上图的意思就是说,访问Views目录下的所有的文件都会由System.Web.HttpNotFoundHandler来处理,所以不要将资源文件(CSS,JS,图片等)放在Views目录中。如果确实要放到Views目录下的话,请修改Views/web.config文件。