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