http://www.cnblogs.com/errorif/archive/2009/02/13/1389927.html
為了完全了解Asp.net MVC是怎樣工作的,我將從零開始創建一個MVC應用程序。
1.創建一個新的ASP.Net Web Application。它包括有一個Default.aspx頁面,一個標准的web.config文件和添加一些初始的引用。
2.添加對“System.Web.Abstractions.dll”、“System.Web.Routing.dll” 和“System.Web.Mvc.dll”的引用,所有的這些都可以在“c:\Program Files\Microsoft ASP.NET\ASP.NET MVC Beta\Assemblies”文件夾中找到(譯注:即Asp.net MVC的安裝路徑)。
使用MvcHttpHandler來處理MVC請求。打開Default.aspx的Code-behind文件(Default.aspx.cs)。在Page_Load方法中,以MVC的方式來處理請求。
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.RewritePath(Request.ApplicationPath);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
}
3.添加一個全局應用程序類(global.asax)。在Application_Start方法中,映射Route到Home Controller。
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapRoute("Default Route",
"{controller}/{action}",
new { controller = "Default", action="Index" });
}
4.為了使用MapRoute和IgnoreRoute方法,你必須先using System.Web.Mvc命名空間(因為它們是擴展方法)。MapRoute方法以route的名字作為第一個參數,以URI模板為第二個參數(譯注:如"{controller}/{action}"),以默認值為第三個參數。應該注意到,默認值對象應該有屬性來匹配URI模板中的屬性的(譯注:如上面代碼中,默認值對象有兩個屬性:controller和action,用來匹配URI模板中的{controller}和{action})。上面的route映射一個Url到Contoller和Action。
5.創建一個默認的Controller。在Web Application的Controllers文件夾中創建一個類,命名為DefaultController。注意到這里的命名約定;Default是route的默認值,而"Controller"只是命名約定中約定的一個后綴名。
Controller類應該繼承自System.Web.Mvc.Controller,同時應該包括一個public的方法作為Action。因為默認的Action是Index(從默認的route中可以看出),這個類應該看起來像這樣:
public class DefaultController : Controller
{
public string Index()
{
return "Hello, world";
}
}
6.運行應用程序,導航到應用程序的目錄(“/”),你可以看到得到的響應是“hello,world”。
但是如果你嘗試導航到Default Controller的Index Action(/Default/Index)時,將會得到一個錯誤信息。
7.添加Url Routing Module.打開web.config,定位到<system.web>下的<httpModules>,添加Url Routing Module:
<httpModules>
...
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule, System.Web.Routing,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
8.運行該應用程序,導航到Default控制器的Index Action。現在你應該可以看到得到的響應結果跟之前的是一樣的。
9.以一個View作為Index Action的返回值。更改Default Controller的Index Action的返回值為ActionResult。這里可以返回很多種類型的Result(比如JsonResult、ContentResult等等)。在本例中,我們將返回一個ViewResult。
public ActionResult Index()
{
return View();
}
創建該Action對應的View頁面。當調用一個無參的View()方法時,它會在跟Controller同名的文件夾中查找跟Action方法同名的View頁面。現在在Views\Default\文件夾下創建一個新的頁面:Index.aspx。
為了讓該頁面成為MVC的View,打開code behind的文件(Index.aspx.cs),讓該類繼承自System.Web.Mvc.ViewPage。
修改該頁面(在Design模式或者Source模式),添加問候信息:
<body>
<form id="form1" runat="server">
<div>
<h1>Hello, world</h1>
</div>
</form>
</body>
10. 運行該應用程序,你應該可以接收到從我們剛剛創建的View頁面中發出的響應信息。Routing引擎調用Default Controller的Index Action,返回View頁面(Index.aspx)。
11. 顯示View頁面的數據。打開Controller,找到Index方法,添加數據到ViewData字典中。
public ActionResult Index()
{
ViewData["name"] = "Guy";
return View();
}
現在,在View頁面,在問候語那行中使用該數據。
<body>
<form id="form1" runat="server">
<div>
<h1>Hello, <%= ViewData["name"] %></h1>
</div>
</form>
</body>
12.運行應用程序,可以看到在Controller中添加進去的數據。
在這篇文章中,我從零開始創建了一個Asp.net MVC應用程序,用以剖析Asp.net MVC和了解在框架背后的神奇的東西。通過這可以幫助我在現有的Web Application中使用MVC。
原作者: