轉自http://firechun.blog.163.com/blog/static/3180452220110272197830/
在傳統的Web架構中,URL總是映射到磁碟上的檔案。例如:一個類似於“/Products.aspx”或“/Products.php”的URL可能由“Products.aspx”或“Products.php”檔案來處理。
在基於MVC的Web架構中,URL的映射有一些不同,映射到檔案被替換成映射到類中的方法,這些類被叫做的“Controllers”(控制 器),由它們來響應和處理HTTP請求、使用者輸入、接收和儲存資料,並且決定如何將響應發回到用戶端(顯示HTML,下載檔案,重新導向URL等)。
添加 HomeController
我們通過添加一個控制器類來開始我們的MVC Music Store應用程式,它將處理連結到網站首頁的URL。遵照ASP.NET MVC的命名規範,我們給這個類取名“HomeController”。
在“方案總管”中的“Controllers”檔案夾上單擊右鍵,選擇“添加->控制器”命令:
在“添加控制器”對話方塊中,將預設名稱改為“HomeController“,按“添加”按紐。
這將建立一個新的檔案——HomeController.cs,並且包含下列代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusicStore.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
}
為了儘可能簡單地開始,我們用簡單的返回字串的方法來替換原來的Index方法,我們只需要做兩點簡單修改
- 修改方法的傳回型別,由ActionResult改成string
- 修改return語句返回字串“Hello from home”
現在,方法看起來是這樣:
public string Index() { return "Hello from Home"; }
啟動應用程式
原文很詳細,從來沒用過VS的看原文也知道怎麼運行,這裡不寫了,總之現在可以啟動程式,按F5(調試啟動)或Ctrl-F5(不調試啟動)
我們看到了這個:
OK,相當快捷,我們建立了一個新的Web網站,添加了三行代碼,在瀏覽器中呈現出一段文本。很明顯,這隻是開始。
(關於VS虛擬IIS伺服器的解說文字,不寫了)
添加 StoreController
我們添加了一個簡單的HomeController實現網站首頁,現在,我們添加另一個控制器來實現音樂倉庫的瀏覽功能。倉庫控制器將實現下列功能:
音樂倉庫的類別列表頁面
列出某類別下的所有音樂唱片頁面
顯示指定音樂唱片的詳細資料
(原文很囉嗦,不寫了)
重複添加HomeController的過程,將名字改為StoreController。
新的StoreController已經有了Index方法,我們使用Index方法來實現所有類別的列表頁面,同時再添加二個方法Browse和Details來實現另外兩個功能。
這些Controller(控制器)中的方法——Index、Browser和Detail被稱為“Controller Actions”,如同你已經看到的HomeController.Index()動作方法,它們的工作是響應URL的請求並且(通常來說)決定什麼樣的內容發回到瀏覽器或使用者請求的URL。
我們修改Index()方法,讓它返回字串“Hello from Store.Index()”,對Browse()和Details()方法也做類似的修改以完成StoreController的實現。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusicStore.Controllers
{
public class StoreController : Controller
{
//
// GET: /Store/
public string Index()
{
return "Hello from Store.Index()";
}
//
// GET: /Store/Browse
public string Browse()
{
return "Hello from Store.Browse()";
}
//
// GET: /Store/Details
public string Details()
{
return "Hello from Store.Details()";
}
}
}
再次啟動項目並分別在瀏覽下列URL:
- /Store
- /Store/Browse
- /Store/Details
訪問這些URLs將調用控制器中的動作方法並返回字串:
太棒了!不過這僅僅是一些固定不變的字串,我們來讓它們變成動態:從URL中獲得一些資訊並把它輸出到網頁上。
首先,我們修改Browser動作方法,讓它接收來自URL的參數(QueryString)。我們為動作方法添加一個參數——gener,當動作方法被調用時,ASP.NET MVC會通過URL的QueryString或表單提交自動為它傳遞一個叫“gener”的參數。
//
// GET: /Store/Browse?genre=?Disco
public string Browse(string genre)
{
string message = HttpUtility.HtmlEncode("Store.Browse, Genre = "
+ genre);
return message;
}
注意: 我們使用HttpUtility.HtmlEncode方法審核使用者輸入,這可以防止使用者使用類似/Store/Browse?Genre=<script>window.location=’http://hackersite.com’</script>這樣的連結對視圖進行JavaScript注入攻擊user
現在,我們來瀏覽/Store/Browse?Genre=Disco
下一個修改是讓Details動作讀取並顯示一個名叫“ID”的輸入參數。與上一個方法不同的是,我們不想把ID的值放到QueryString參數中,而是直接把它作為URL的一部份,例如:/Store/Details/5
ASP.NET MVC很容易讓我們實現這樣的想法而不需要做任何設定,ASP.NET MVC的預設路由設定把URL中動作方法後面的部份看成一個名叫“ID”的參數,如果你的動作方法有一個叫“ID”的參數,ASP.NET MVC會自動這部份做為參數傳遞。
//
// GET: /Store/Details/5
public string Details(int id)
{
string message = "Store.Details, ID = " + id;
return message;
}
運行應用程式並且瀏覽/Store/Details/5
看看到目前為止我們做了什麼:
- 在VS中建立了一個新的ASP.NET MVC項目
- 討論了ASP.NET MVC應用程式的基本的目錄結構
- 學習了如何使用ASP.NET程式開發伺服器運行Web網站(這部份我沒寫。。。)
- 建立了兩個控制器類:HomeController和StoreController
- 在控制器中添加了動作方法響應URL請求並把文本返回給瀏覽器