2011-02-16 26 views
13

在定義了ModelASP.NET MVC如何知道如何填充模型以提供Controller的Action?它是否涉及反思?

public class HomeModel { 
    [Required] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    [Required] 
    [Display(Name = "Surname")] 
    public string Surname { get; set; } 
} 

,並具有以下Controller

public class HomeController : Controller { 
    [HttpPost] 
    public ActionResult Index(HomeModel model) { 
     return View(model); 
    } 

    public ActionResult Index() { 

     return View(); 
    } 
} 

通過HomeModel model得到與ASP.NET MVC值填補了一些 「神奇」 的機制。有誰知道如何?

從一些基本的測試,現在看來,這將着眼於POST響應,並嘗試匹配的響應對象名稱與模型的屬性。但要做到這一點,我想它必須使用反射?這不是可繼承的慢嗎?

感謝

回答

11

是的,你是在談論神奇ModelBinder

ModelBinder負責創建一個模型並使用表單後處理中的值進行水合並執行驗證,其結果將顯示在ModelState中。

默認實現DefaultModelBinder但你可以插入你自己的。

3

的DefaultModelBinder確實使用反射來設定模型的屬性。更具體地說,它使用PropertyDescriptor類的SetValue方法。當然,您可以始終創建custom model binder以避免反射。

相關問題