2009-07-25 43 views
5

我怎麼能在控制器中創建一個方法,並且只需要輸入一些參數,然後在點擊一個表單提交之後就會計算出來呢?底下,它是如何找到正確的方法,以及它如何發現我只是想要這些論點?asp.net mvc怎麼弄出來的?

回答

8

一言以蔽之:

  1. 路由引擎處理的HttpRequest,並檢查請求的URL。當它找到第一個路由匹配時,它會創建一個新的實例MvcRouteHandler,並將它的URL的分解標記傳遞給RouteValueDictionary。

  2. 路線的MvcRouteHandler接受請求,並嘗試實例的控制器類實例。按照慣例,它會查找一個名爲「XXXXXXController」的類,其中X由路由中的{controller}參數替換。

  3. 一旦它找到的控制器,它調用在其上,由路線的{動作}參數給出的適當的方法。路徑中存在的任何命名參數(如{id})都會作爲參數傳遞給方法。

基本上,ASP.Net MVC「知道」的一切都來自路由信息。它不能從稀薄的空氣中獲取參數 - 它們必須來自路徑解析。如果信息不在請求的URL中,則不能傳遞給方法。

還應當指出的是,你可以通過你的路由覆蓋框架的行爲,請使用備用處理器,而不是MvcRouteHandler。該框架具有很強的可擴展性,因此您可以在許多地方插入自定義功能。

+0

從路線或表單字段集合。 – GalacticCowboy 2009-07-25 03:57:00

1

有在控制器,動作和視圖解析,還有ModelBinders發揮相當多的代碼。非常多的是,您最好能夠查看框架的特定部分,並提出更詳細的問題以獲得更多答案。

幸運的是,ASP.NET MVC framework has been open-sourced,所以如果你很好奇它是如何工作的,你可以get the code自己看看。其優秀的代碼閱讀,你一定會學到一些東西。

更重要的是,您應該看看System.Web.Mvc.MvcHandler和System.Web.Mvc.ControllerActionInvoker類,它們應該引導您沿着正確的路徑回答您的問題。