visual studio用于创建mvc的模板默认包含了一个极其简单的mvc例子。通过这个例子你可以了解mvc应用的不同部分组成。这里我们利用这个简单的例子进行ASP.NET MVC基本概念的学习。 首先创建mvc应用。这里我们还是不选择添加测试项目。 创建成功后,可以看到一些文件夹和文件。你需要对Models,Views,Controllers这三个文件夹特别关注。顾名思义,这三个文件夹内包含了m,v,c中的文件。 展开controllers文件夹,我们可以看到一个叫做AccountController.cs的文件和一个HomeController.cs文件。Views文件夹下可以看到三个子文件夹 Account, Home and Shared。展开Home文件夹,看到两个文件About.aspx 和Index.aspx 。这些文件组成了我们这个mvc简单的实例。文件结构如下图 按F5运行这个项目,如果是第一次运行,会提示启动调试模式对话框。选择确定。 这个简单的项目只含有两个页面:Index和About,当程序第一次运行的时候,浏览器呈现的是index页面,可以通过右上部的导航定位到About页面。 注意地址栏中的地址。例如:当你点击About按钮时,地址栏中的地址变为/Home/About. 关掉浏览器回到VS,你不会在/Home/About目录中找到任何文件,这些文件是在该目录是不存在的,但是为什么会这样呢? ASP.NET MVC基本概念:一个URL不等于一个页面 当你创建一个asp程序或asp.net web窗体程序时,一个URL和一个页面是一一对应的。如果你向服务器请求一个页面somepage.aspx,服务器磁盘上应该有一个页面叫做somepage.aspx,如果somepage.aspx不存在,你会得到一个404错误提示。 但是mvc程序相比之下,你在地址栏中写入的地址与项目中的文件并不是一一对应的。在mvc程序中,一个URL相当于一个controller action,并不是一个aspx页面。 在传统的aspx程序中,浏览器请求被映射到页面,在mvc程序中,浏览器请求被映射到controller action。web窗体应用是以内容为中心,mvc应用以程序逻辑为中心。 学习asp.net mvc 路径 浏览器请求得到一个由asp.net framework中叫做asp.net routing机制映射的controller action。asp.net routing被mvc框架用来为正在到达的请求选择一个路径指向controller action。 asp.net routing用一个路由表(route Table)来提交请求。这个路由表在程序第一次运行的时候就已经产生了。route table在global.asax文件中被定义。默认global.asax内容如下:
当程序运行时, Application_Start()方法就被调用,在上面代码中, Application_Start()方法调用RegisterRoutes()方法,RegisterRoutes()创建默认路由表。 默认路由表由一条路由组成。这条路由把一个正在进行的请求分成三个部分。第一部分的URL被映射到controller,第二部分URL被映射到action,最后一部分用来给action传递参数id。例如 假设下面的url:/Product/Details/3 这个url被分解成三个部分:controller=product,action=details,id=3 在global.asax文件中定义的默认路由包含这三个参数的默认值。默认controller为Home,默认action为Index,默认id为空。有了上面的知识做基础,来分析下面这个url /Employee 分解成三部分为controller=employee,action=Index,id=空。 最后,如果我们打开一个mvc应用不写任何的路径(如http://localhost),那么,这个路径被解析成下面的三部分 controller=Home,action=Index,id=。 请求被映射到Homecontroller中的Index()action。 学习ASP.NET MVC:理解controllers 一个controller对一个用户与mvc应用交互的方式负责。controller包含mvc应用的流控制逻辑。controller决定了当用户请求后返回给用户一个什么内容。 controller仅仅是一个类(C#或VB class),这个mvc简单例子包括一个位于controllers文件夹下的HomeController.cs文件。内容如下
注意该controller下含有Index和About两个方法。这两个方法就是controller提供的公共的两个action。/Home/Index这个路径就会引用这个controller中的Index()方法。同理About()也是这样。 在controller中的任何公共方法都被当做一个controller action。对此要非常小心。这就意味着在controller下面的任何公共方法都可以被互联网上输入了正确URL的浏览器所访问到。 学习ASP.NET MVC:理解Views 上面两个Action同时都返回了view,view包含了html标记与被送往客户浏览器的内容。在mvc应用中,view就相当于一个页面。我们必须在合适的位置创建相应的view。HomeController.Index() 返回一个在下列目录中的view:\Views\Home\Index.aspx,The HomeController.About()则返回\Views\Home\About.aspx。 一般,如果想为一个controller返回一个view,你需要在Views目录下新建子目录,并以controller同名,在这个子目录中,必须建立一个aspx页面,并以controller action同名。 如About.aspx内容如下:
如果我们忽略掉第一行,剩下View中的大部分都由标准HTML组成。我们可以修改这个View用我们想要的HTML代码。 View与asp和aspx web窗体十分类似。可以包括HTML和script内容。你可以根据自己的喜好的.net语言写脚本(c#或VB),通过这些脚本,我们可以呈现动态数据,如数据库数据。 学习ASP.NET MVC:理解Models controller和Views都讨论完了,最后我们要讨论一下最后一个ASP.NET MVC基本概念:Models。mvc Models是什么呢? Models包含了在controller和Views中没有实现的所有的应用逻辑。Models应该包含所有的应用业务逻辑,认证逻辑,数据访问逻辑。例如:如果使用了Microsoft Entity Framework 来实现数据访问,就需要在Models文件夹下建立Microsoft Entity Framework类的.edmx 文件。 View应该只包含与用户界面有关的逻辑。controller应该只包含转到正确View或转到其他action的逻辑。其他的东西都应该放在Models下面。 一般,我们需要向“胖”Models和“瘦”controllers努力。controller方法应该只含有少量的几行代码就可以。如果一个controller很“胖”,你则需要考虑将逻辑移到models文件夹下的一个新类里面。 |
|