2008-12-14 49 views
1

有人可以解釋或鏈接到一篇文章,該文章解釋了傳入控制器操作的參數是如何填充的?當你有Controller/Action/ID時,我理解基本映射,並且ID作爲變量傳入,如果它不轉換爲您請求的類型,那麼它將不會被傳入該動作。您可以向我解釋MVC控制器方法的Action參數嗎?

不過,我一直在尋找的MVCContrib子控制器代碼並有下面的例子:

public ActionResult Index(FirstLevelSubController firstLevel) 

我想知道這個參數是如何被填充,因爲據我所知,沒有什麼是被傳遞填充這個?

比方說,我創建了下面的動作是在控制器中的唯一行動:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(Task task, ToDoList list) 

我會怎麼傳回,爲什麼? (我知道我可以做一個簡單的測試發現,如果他們沒有回來,這將使我不爲明智的原因。

感謝

回答

2

一般來說,其ControllerActionInvoker的函數。對象被傳遞到之後,他們在定製ControllerActionInvoker執行實例化的行動。約ControllerActionInvoker作品如何看一看ASP.NET MVC - ControllerActionInvoker: Part 1

欲瞭解更多信息也有一個所謂的「模型綁定」功能,可以幫助您的請求參數綁定到你的對象,所以在大多數情況下,你不需要製作你自己的ControllerActionInvoker實現。看看這個: ASP.NET MVC model binding from ScottGu

4

首先,您將通過查詢參數獲取傳遞給具有[AcceptVerbs(HttpVerbs.Get)]屬性的方法的參數的唯一方法。例如:

http://localhost/Task/Index/?task=mytask&todolist=a,b,c,d 

你們中許多複雜的參數請參閱該操作方法是通過郵寄調用,將最LIKEY成爲候選人的[AcceptVerbs(HttpVerbs.Post)。

創建下面的示例方法:

public ActionResult Index(int id, FormCollection form) 
{ 

} 

如果你在哪裏檢查表格收集你可能有一些像後窗體發佈以下內容:在這種情況下asp.net

form["name"] = "bob" 
form["city"] = "LA" 
form["state"] = "CA" 
form["zip"] = "90210" 

mvc簡單地解析了表單值並將它們拋入表單集合對象中。當然,現在您必須手動提取每個參數才能訪問這些值。如果有asp.net mvc可以爲你處理這個過程的方法,這不是很好嗎?如果你有以下類:

public class User 
{ 
    string string Name {get; set;} 
    string string City {get; set;} 
    string string State {get; set;} 
    string string Zip {get; set;} 
} 

,並補充說,以你的操作方法

public ActionResult Index(int id, User user) 

asp.net的MVC將使用反射來的用戶參數調用這樣就把你的動作方法之前。實際上,它正在執行以下操作,對於表單集合中的每個鍵,它都使用反射來定位該屬性,並在action方法中聲明參數列表。如果它發現與它匹配的屬性將嘗試設置它的值。

user.Name = form["name"] 
user.City = form["city"] 
user.State = form["state"] 
user.Zip = int.Parse(form["zip"]) 

然而,id的值會從相對於形式收集的路由值來設定。

相關問題