簡單的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的代碼分布更加分散,卻也更加整潔,也更加富有彈性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM