[轉]剖析ASP.Net MVC Application


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。

Anatomy ASP.Net MVC Application5.創建一個默認的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”。

 Anatomy ASP.Net MVC Application

但是如果你嘗試導航到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。現在你應該可以看到得到的響應結果跟之前的是一樣的。

Anatomy ASP.Net MVC Application 

9.以一個View作為Index Action的返回值。更改Default Controller的Index Action的返回值為ActionResult。這里可以返回很多種類型的Result(比如JsonResult、ContentResult等等)。在本例中,我們將返回一個ViewResult。

public ActionResult Index()
{
  return View();
}

Anatomy ASP.Net MVC Application

創建該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中添加進去的數據。

Anatomy ASP.Net MVC Application 

在這篇文章中,我從零開始創建了一個Asp.net MVC應用程序,用以剖析Asp.net MVC和了解在框架背后的神奇的東西。通過這可以幫助我在現有的Web Application中使用MVC。

原作者:


免責聲明!

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



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