1:什么是MVC模式
MVC(Model-View-Controller)是一种软件架构模式,把软件系统分为一下三个基本部分:
模型(Model):模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。
视图(View):视图能够实现数据有目的的显示。在视图中一般没有程序上的逻辑。
控制器(Controller) :控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。
这三部分基本的关系图:
2:MVC基本原理
a:定位Controller:
在mvc中,客户端所请求的URL首先被映射到相应的Controller中,然后由Controller来处理业务逻辑,例如从Model中取数据,然后由Controller选择合适的View返回给客户端。如果我们的ASP.NET MVC程序访问的是http://localhost:2176/Home/Index,那么它访问的其实是HomeController中的Index这个Action.如下图:
其中 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目录下的默认配置文件里找到原因:
也就是访问Views目录下的所有的文件都会由System.Web.HttpNotFoundHandler来处理。