Asp.net-Mvc

ASP.Net MVC ModelBindingContext 類——它的模型值是如何填充的?

  • January 6, 2012

我對模型綁定器如何在 ASP.Net MVC 中工作感到有些摸不著頭腦。

具體來說,BindModel()方法有一個ModelBindingContext參數,裡面保存著模型名稱和類型,但是我不明白ModelBindingContext是怎麼接收這些值的。

必須從發布的表單值或查詢字元串參數或其他數據源填充 MVC 模型。但是什麼機制決定了傳遞給 ModelBindingContext 的模型類型,以及如何選擇一種模型類型而不是另一種模型類型,甚至(比如說)一個包含各個發布值的簡單列表?

在我看來,ModelBindingContext“知道”它正在處理的模型類型,我不確定它來自哪里或填充它所涉及的工作流。

有趣的問題。以下是 MVC 功能的簡單概述。這一切都由 ControllerActionInovker 類處理。這不是特定的順序,但很接近。

  1. ControllerActionInovker 通過反射確定參數類型。
  2. Next ValueProviders 是從 HttpContext Request Form、Route、QueryString 等屬性創建的。您還可以提供自己的價值提供者。
  3. 這些 ValueProviders 通過充當虛擬 ValueProvider 的集合提供給 ModelBindingContext。
  4. 然後 ControllerActionInovker 查找特定類型的 ModelBinder。如果找不到,則預設為內置的 DefaultModelBinder。
  5. 在大多數情況下,使用 DefaultModelBinder。它的工作是創建一個模型,並使用 ValueProviders 使用模型屬性名稱作為鍵將屬性與值連接起來。當 ValueProviders 有值時,它們返回一個負責類型轉換的 ValueProviderResult 對象。

您可以在位於 codeplex.com 的 ASP.net MVC 原始碼中親自看到這一點。查找 ControllerActionInvoker 類和 GetParameterValue 方法。

引用自:https://stackoverflow.com/questions/3523752