2013-05-29 47 views
4

我最近出版的我的Advanced Controller如何.NET MVC控制器解析參數

新版本這基本上是一個通用控制器(ASHX)作用,對ASP.net Web表單,像一個MVC控制器感它接收到一個請求並自動調用所需的內部方法,根據HTTP動詞解析請求querystring或params中的參數並返回結果。 它做了很多,但這是我主要的初始功能。

對象的創建和水化從請求信息是該項目中最痛苦的一部分,但最後我達到性能做一個MVC控制器相同的請求相似。

就像我說的,.NET MVC控制器實際上做相同的,但我從來沒有設法去了解如何。

舉例來說,如果我這樣做AJAX調用一個MVC控制器:

$.ajax({ 
    type:'GET', 
    url: 'SomeData/List' 
    data:{filter: 'whatever'} 
}); 

這將調用接收一個字符串過濾特性的控制方法。

但它可以變得更加複雜,因爲我們可以調用接收復雜類型,嵌套複雜類型和集合和「神奇」的參數出現在正確的控制器參數解析控制器。

有誰知道這管道是在.NET MVC做了什麼?

+3

檢查出[DefaultModelBinder](http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultmodelbinder%28v=vs.108%29.aspx) – Jamiec

+1

沒什麼魔力。這被稱爲模型綁定。你可以谷歌的,或者看看例如http://www.howmvcworks.net/OnModelsAndViewModels/TheBeautyThatIsTheModelBinder –

+1

模型綁定。有一個讀在這裏http://msdn.microsoft.com/en-us/magazine/hh781022.aspx –

回答

4

該過程稱爲模型綁定。有一個默認的模型綁定器,它會嘗試通過查看請求中的內容以及控制器的期望將嘗試將已發佈的值轉換爲複雜類型。

爲此,它會根據約定。很明顯,這些視圖也實現了這種約定,因此在使用視圖和控制器與模型聯編程序時,您沒有任何摩擦。

下面的帖子解釋了概念的詳細信息:

http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx http://odetocode.com/blogs/scott/archive/2009/05/05/iterating-on-an-asp-net-mvc-model-binder.aspx http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx

如果谷歌「ASP.NET MVC模型綁定」,你會發現關於這個問題的更多的信息。

+0

好吧,也許這個詞「魔術師」是不是最合適的:) 我的意思是,我們可以」在ControllerContext之外使用它可以嗎?有沒有一種方法可以在沒有整個MVC基礎架構的情況下使用該代碼? – AlexCode