简单的mvc之一:简单的开始

  mvc学习到现在,相对所学到的一系列的知识做一个总结,于是就有了这个标题—简单的mvc。文如名,写的是简单的mvc的知识,目标群也不言而喻。这一篇来个简单的开始,从头建立一个web项目,比如hello world。

  asp.net项目的请求处理核心是IHttpHandler,不论是之前的Page,还是之后MVC。所以最简单的web项目,就是只有一个IHttpHandler的项目。项目只有两个文件,一个.ashx文件,内容:

<%@ WebHandler Class="Danyuers.SimpleMvc.Hello" Language="C#" %>

另外一个是相应的代码文件,建立一个名为Hello的类,也就是上面的Class属性所指向的类别,代码如下:

namespace Danyuers.SimpleMvc {
    public class Hello : IHttpHandler {
        public bool IsReusable {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context) {
            context.Response.Write("<h1>hello world!</h1>");
            context.Response.End();
        }
    }
}

然后编译(请将编译目标文件改为bin),映射到虚拟目录,通过localhost:xxxx/xx.ashx即可访问到建立的项目。记得添加相应的引用(system.web)。

  好了,简单的项目搭建已经完成,但这不是真正的mvc,mvc最直观的表现就是路由映射,区别于webform的文件映射。一个简单的mvc项目需要哪些东西呢?第一,global.asax文件,定位到HttpApplication;第二,路由映射表,定义路由;第三,路由映射对象,也就是控制器。如同上面的ashx一样,global.asax也只是包含一行指令:

<%@ Application Codebehind="Global.cs" Inherits="Danyuers.SimpleMvc.MvcApplication" Language="C#" %>

还是同上,建立global.cs,在其中建立SimpleMvcApplication,代码如下:

using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Danyuers.SimpleMvc{
    public class MvcApplication : HttpApplication {
        protected void Application_Start() {
            RouteRegister.Regist(RouteTable.Routes);
        }
    }
}

注意其中的RouteRegister,其中定义了我们需要的路由映射。建立单独的代码文件RouteRegister.cs,代码如下:

using System;
using System.Web.Mvc;
using System.Web.Routing;

namespace Danyuers.SimpleMvc{
    internal class RouteRegister {
        public static void Regist(RouteCollection routes) {
            routes.RouteExistingFiles = false;
            routes.Ignore("{resources}.axd/{pathInfo*}");

            routes.MapRoute(
                name: "default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Hello", action = "Index", id = UrlParameter.Optional },
                namespaces:new String[]{"Danyuers.SimpleMvc.Controllers*"}
            );
        }
    }
}

从其中可以很明显看到建立一个通用路由:{controller}/{action}/{id}。最后一步,建立控制器。建立Hello.cs,代码如下:

using System;
using System.Web.Mvc;

namespace Danyuers.SimpleMvc.Controllers {
    public class HelloController:Controller{
        public void Index() {
            Response.Write("<h1>Hello,world!!</h1>");
            Response.End();
        }
    }
}

好了,最后编译,iis映射,运行即可,相较于最初的单httphandler项目,这次直接访问域名即可。

  相较于webform,mvc的代码分布更加分散,却也更加整洁,也更加富有弹性。

posted on 2013-08-29 10:26  wangjieas  阅读(1681)  评论(5编辑  收藏  举报

导航