zoukankan      html  css  js  c++  java
  • 简单的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的代码分布更加分散,却也更加整洁,也更加富有弹性。

  • 相关阅读:
    洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
    洛谷P1083 [NOIP2012提高组Day2T2]借教室
    洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
    POJ1692 Crossed Matchings
    洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
    阅读了几个别人写的轮播源码
    js遍历函数
    解决IE6的PNG透明
    04-树5 Root of AVL Tree
    平衡树实现
  • 原文地址:https://www.cnblogs.com/wangjieas/p/3288543.html
Copyright © 2011-2022 走看看