引子

MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟。使开发也变得简洁人性化艺术化,,最近项目需要改用asp.net MVC技术来开发,在开发过程中随既写出本人对mvc的学习心得,希望高手赐教。

搭建系统开发环境

在官网上下载ASP.NET MVC安装文件, 一路回车完成安装. 启动VS2010

                       

工程名称为“SpringMvcApplication1”点击OK进入下一步,

 

MVC3提供了两种视图引擎,分别为:ASPX和Razor,关于MVC视图引擎方面的知道我以后再谈,现在我选择Razor视图引擎(MVC开发建议选择)。

MVC3提供两种开发模板,分别为:Empty和InternetApplication

       Empty:系统只负责创建系统必须空目录结构,代码自己填。

InternetApplication:系统创建系统必须目录结构的同时,还创建一些实例代码,和一个名称叫SpringMvcApplication1.Tests的测试工程。

我选择InternetApplication。单击OK

 

启动程序,尝尝鲜

运行项目, 一个ASP.NET MVC的项目已经运行在我的电脑

 

呵呵!现在一个完成的MVC3程序就创建完毕了,而且那个Home和About还能点击! 看着能运行的实例, 心里就踏实多了!

MVC运行原理

看到程序成功运行了,下面就要了解MVC3的原理了,所为知已知彼百战不殆。

Model就是获取的网页需要展示的数据模型,

Controller是控制视图的控制器

View 是具体的视图

MVC处理Http请求的过程:

 

一个URL请求, ASP.NET MVC引擎会分析这个URL要使用那个Controller, 这个Controller(实际上真正的方法是Controller的Action)从数据库或者其他数据源获取数据,通常这些数据是一个业务的模型类(即MVC中的Model). Controller将Model对象传递给页面(即MVC中的View), 页面显示在浏览器上.

MVC实例代码分析

  1. 程序默认起始页

首页网站的地址应该是http://localhost:3693/ (3693是端口号,随机生成,所以会不同), 为什么地址不是具体的页面但是最后却将请求提交给了view/home/Index.cshtml页面? 很明显是使用了URL重写. ASP.NET中叫做UrlRouting,对应的程序集是System.Web.Routing, 打开项目的Global.asax.cs文件, 会找到我们建立的页面重写规则:

Global.asax

        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }

关于Routing的深入了解将在以后介绍,先看代码"{controller}/{action}/{id}", /是MVC框架中URL请求规则,new { controller = "Home", action = "Index", id = UrlParameter.Optional }为设定当前起始处理Controller为Home中的Index方法(Action)来响应请求。

HomeController.cs

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";

            return View();
        }

        public ActionResult About()
        {
            return View();
        }
    }

 

在Controllers文件夹下我们可以找到HomeController.cs, 这里使用了一个约定, 就是如果URL中获取到的Controller名字是Home, 则他的Controller类名就是HomeController. 在URL中的名字后加上”Controller”.

实例中Controller都放在Controllers文件夹, 所以我们可以按照命名约定很容易就可以找到HomeController类.

其中的Index和About都是Action.这个Action是个什么东东呢?目前我只知道一个Controller可以包含多个Action, MVC模式中Controller角色的具体实现逻辑都是在Action中的.

因为我们的Action是Index, 所以自然就要调用Index()方法.这里将"Webcome to ASP.NET MVC!", 这里的Model角色就是这句话, 也就是一个字符串对象.

Controller的一个重要作用就是将Model对象传递给View,也就是具体的页面. 传递的方法就是将这个字符串放到ViewBag.Message这个对象中, 然后在页面上也调用这个对象获取数据. 这个ViewBag对象一定是动态的, 或者至少是和HttpContext对象关联的, 否则到了View页面上是不能够调用的.

Index.cshtml

@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

接下Razor引擎会将页面中的HTML部分以及上面的数据部分和在一起返回给浏览器.

结语

虽然仅仅是第一篇入门文章, 但是不是觉得已经会用ASP.NET MVC了? 虽然学习不可以骄傲, 但是可以自豪的是ASP.NET MVC我已经不再陌生,在后续文章中,我将对MVC的各种细节,以及和Spring.net,Nhibernte结合使用具体的讲解.希望大家喜欢本系列文章!