2009-05-01 59 views
2

比方說,我有一個控制器的動作定義爲:ASP.NET MVC模型綁定和動作參數

public ActionResult(MyModel model, string someParameter) 
{ 
    // do stuff 
} 

我對爲MyModel類型的定製模型綁定,並且有一個名爲「SomeParameter」表單域在不受模型約束的觀點中。 ASP.NET MVC如何知道將Request.Form["SomeParameter"]的值作爲動作的「someParameter」參數的值?

回答

1

因爲默認模型聯編程序將用於someParameter,除非您另有指定。而默認模型聯編程序完全按照您所描述的方式進行。

2

ASP.NET使用反射來確定調用的正確方法並構建要傳遞的參數。它基於FormCollection數組。基本上它會看到型號* Keysin在那裏和FormCollection["someParameter"]它將首先嚐試Action(model,someParameter)然後Action(model)然後Action()。由於它使用模型和someParameter參數找到Action,它會嘗試將它們轉換爲參數類型。

但是,默認情況下,它會盲目地引入一些安全風險,因此this blog post會對此進行更詳細的說明。

如果任何人都可以發佈一個更詳細的鏈接描述ModelBinding如何在引擎蓋下完成,那將是非常好的。

1

Phil Haack在How a Method becomes an Action上有一個帖子,它解釋了這個決議是如何發生的。

+0

恩,那不是菲爾哈克。你是否被哈克德? – Sean 2016-04-22 16:30:38

0

一個最簡單的方法是具有相同名稱的動作方法的輸入參數的網頁HTML項目。 EX)在查看我們:

<input name="refNo" type="text"> 

然後在操作方法:

public ActionResult getOrders(string refNo) 

所以,它只是結合「引用號」到「getOrders」的輸入參數的值行動。