控制器和Action方法
原文:http://quickstarts.asp.net/3-5-extensions/mvc/MVCControllerActions.aspx
1. 介紹
控制器的職責:定位並執行Action方法,並確保它能正確執行;擷取Action方法所需的參數並傳遞給它;捕獲Action方法執行期間出現的錯誤;提供“WebFormViewFactory”類以便產生ASP.NET頁面類型的視圖。
一個簡單的樣本:
namespace MvcApplication.Controllers
{
public class HomeController : Controller
{
public void Index()
{
RenderView("Index");
}
public void About()
{
ViewData["CompanyName"] = "Contoso";
RenderView("About");
}
}
}
2. Action方法
MVC架構預設認為所有public方法都是Action方法。若不想讓某個public方法成為Action方法,應該對其使用“NonActionAttribute”屬性標記。
3. Action方法的參數
預設地,Action方法的參數是一組索引值對,它們來自Form表單、查詢字串和cookie。
控制器基類Controller負責把來自表單資料和RouteData執行個體的參數傳給Action方法。當參數值無法解析時,若參數時引用或Nullable類型,則傳遞null給它,否則則拋出異常。
為了直接存取URL中的資料,控制器提供了Request和Response類,他們的語義對應於HttpRequest 和 HttpResponse。下面是一個簡單的例子:
public void Detail()
{
int id = Convert.ToInt32(Request["id"]);
}
4. 自動對應Action方法的參數
當HTTP請求中包含與Action方法的參數名字相同的參數時,該參數的值將被自動傳遞給Action方法。另外,MVC架構同樣支援選擇性參數,當Action方法的參數為nullable類型,且為傳遞給此參數任何值時,控制器將傳遞null給此參數。下面是一個樣本:
public void ShowArticles(DateTime date)
{
if(!date.HasValue)
{
date = DateTime.Now;
}
// ...
}
5. 處理未知Action
當控制器處理一個未知的Action時,它將拋出HandleUnknownAction異常,控制器預設的處理方式是返回HTTP 404錯誤。另外,可以通過重寫“HandleUnknownError”方法實現自訂的錯誤處理。下面是一個例子:
public void override HandleUnknownError(string action) {
// Redirect to a search page where the unknown action is
// the search query. Determine when to show the search page
// based on the result of calling a ShouldShowSearch() method.
if (ShouldShowSearch(action) == true)
{
RedirectToAction("search", action );
return;
}
base.HandleUnknownError(action);
}