在用Asp.Net MVC写这个Hello World之前,先来聊一下这个MVC到底是什么东西!
MVC是一种模式,是一种软件的构架模式。它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller)。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。
模型(Model),视图(View)和控制器(Controller)简称"MVC",它们之间的关系如下图1.
图1.
模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。
视图(View) 视图层能够实现数据有目的的显示;在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
控制器(Controller) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。
所以图1就可以延伸为下图2.的形式。
图2.
MVC的描述就先到这里吧!我们还是用它给大家打个招呼吧!MVC自问世至今也有经历了N次变身了!1.0的版本BUG太多了,相对也不成熟,不稳定。到时2.0的时候就好很多了,但是还是残留一点的不足,还是很有很多问题,首先满页面的<%%>就让很多人感觉不爽了!到了3.0的时候那就相对完美很多了,出了新的Razor引擎写法对程序员来说友好很多了!如果是新手,我建议从3.0一起学习吧!当然还有大家一起期待的4.0版本,目前还在内测(Beta)状态,相对3.0则是更加强大了。
当然学习3.0还是要感谢许多前人为我们写了不少的文章,供我们新手学习,因为现在针对Asp.Net MVC的资料还是甚少,可见园子上那些前人是付出多少心血为了让我们学习新的东西,在此深表感谢。
新建项目Asp.Net MVC 3 Web应用程序,如图3.
图3.
当点击创建之后,进图如下图4的选项框。
图4.
我们当然选择视图引擎为Razor的引擎了,因为我们只需要它给我们说一句简单的话,也就不需要创建单元测试项目了(要是大的项目这个还是需要的)。我们创建一个空的项目,创建完成后VS会自动为我们配置好环境如下图5.
图5.
创建完成后直接运行,肯定是404,因为项目是空的,我们也没有给里面加什么东西。
在MVC里处理请求的是Controllers,在Asp.Net Mvc中,Controllers都是简单的C#类(通常继承了System.Web.Mvc.Controller基类),在Controllers中每一个public Method称为Action Method,这意味着你可以通过URL来调用它。MVC约定:将所有的controllers放在一个名字为Controllers的文件夹下(MVC处处体现着约定胜于配置)。
既然这样,我们添加一个Controller吧!添加如下图6.
图6.图7.
添加一个HomeController的到Controlles文件夹下,如上图7.
在HomeController里面写代码吧!
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Hello_Asp.Net_Mvc.Controllers { public class HomeController : Controller { public string Index() { return "Hello World"; } } }
这次有东西,运行一下看看。跑起来的结果如图8.
图8.
但是在MVC里面我们是要好好的理解一下路由:MVC程序也使用了ASP.NET Routing决定URL怎样映射到实际的Controller和Action上的过程。
当我们创建好MVC项目完成后,就已经添加好了默认的路由。
所以当你输入一下三种方式的时候,默认路由会把你的请求引导到HomeController(控制器)里的Index Action(方法)上来;
- /
- /Home
- /Home/Index
既:我们输入http://locahost:xxxx/或者http://locahost:xxxx/Home或者http://locahost:xxxx/Home/Index都会得到"Hello World"!
我们也可以在Global.asax上自己定义路由规则。上面的Index方法返回的是字符转,如果要对浏览器响应一个HTML页面,就需要我们创建View(视图)了。
那修改一下HomeController里的Index方法,
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Hello_Asp.Net_Mvc.Controllers { public class HomeController : Controller { public ViewResult Index() { ViewData["Message"] = "Hello World!"; return this.View(); } } }
代码解释:ViewResult表示一个类,该类用于使用由 IViewEngine 对象返回的 IView 实例来呈现视图。
然后我添加一个视图进来,在我们修改的HomeController的Index(Action)方法上右键,选择添加试图,如下图9.
图9.
然后会出现如图10的选项框,直接点击添加。下图10.
图10.
这个时候VS会自动完成在Views文件夹下创建View文件夹并且创建好Index.cshtml视图引擎文件。如下图11.
图11.
然后搞完这个Index.cshtml页面,让他以相应HTML的方式给我们展示"Hello World"吧!
Index.cshtml的代码如下:
@{ ViewBag.Title = "Asp.Net Mvc Index"; } <h2>@this.ViewData["Message"]</h2>
写完,我运行一下程序,看看结果如图12.
图12.
到这里"Hello World!"已经说出来,o(∩_∩)o 新手自己动动手吧!
补充一点哈:就是我们视图(View)的名字跟控制器(Controller)里的方法(Action)的名字一样,所以路由会自动去呈现View的名字为Index的HTML给浏览器;方法(Action)的返回类型统称为
ActionResult,这里具体到ViewResult.
呵呵!新人可以试试其他的返回类型玩玩,学习学习,认识认识!由于本人也是新人,要是那里描述有错误还是写错的地方,请大家多多指教,大家共同学习!