2012-04-04 50 views
12

我想知道是否有方法使用內置模型綁定,類似於控制器操作之前發生的內部模型綁定。使用.Net Mvc手動模型綁定

我的問題是,我想能夠控制綁定,因爲我不知道要綁定的對象的類型,直到我實際上在控制器操作的上下文中。

我明白我可以繼承DefaultModelBinder進行自定義綁定,但我很高興與什麼的已經在提供,只是想利用它 - 藉此理想例子得到什麼,我以後我的想法:

public ActionResult DoCustomBinding(string modelType) 
{ 
    ... // logic to determine type to check and create strong 'actual' type 

    object model = BindModel(actualType); 

    ... // do something with bound model 

    return View(); 
} 

我已經研究過使用DefaultModelProvider,但不能確定這是否是要對這個正確的方式,我不知道如何獲取ModelBindingContext。

+0

你說得對。在這樣一個有用的網站上這是不好的行爲,我已經給了自己一個徹底的答案。 – 2012-04-04 20:46:41

+0

我會盡量更具體一些,我的最終目標是能夠驗證裝飾有驗證屬性的類的單個屬性。所以,只需要一個字符串名稱來檢查,字段名稱和值(我們希望能夠綁定模型(我需要從類型中解決),然後對它執行檢查。 – 2012-04-04 20:50:05

+0

我要去看看ControllerActionInvoker http://aspnet.codeplex.com/SourceControl/changeset/view/72551#266452看起來它可能會讓我知道它是如何在內部完成的。 – 2012-04-04 21:20:47

回答

0

您是否在查看IModelBinder界面?

public class CustomModelsBinder : IModelBinder { 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { } 
} 

然後添加到您的Global.asax文件:如果你想驗證只是一個模型的特定部分

protected override void OnApplicationStarted() { 
    ModelBinders.Binders.Add(typeof(CustomModels), new CustomModelsBinder()); 
} 
+0

不是,我已經使用類似的東西來處理枚舉。我想要使​​用內部引擎和類型說,這裏是我想要創建和綁定的類型,去創建並綁定到它並帶回結果(在控制器操作的正常例程之外)。 – 2012-04-04 20:52:59

0

,這可能是重複我以前回答MVC Partial Model Updates的問題。

關於使用System.ComponentModel.DataAnnotations.MetadataType的很酷的部分是,模型聯編程序將保持綁定到派生對象,其基本上與基礎對象相同,只是使用不同的顯示/驗證元數據。

+0

謝謝 - 這看起來很有用,我剛剛設法使綁定工作,所以我現在可以看到一些解決方案... – 2012-04-04 21:45:17