15

コントローラー アクションの前に発生する内部モデル バインディングと同様に、組み込みのモデル バインディングを使用する方法があるかどうか疑問に思っています。

私の問題は、実際にコントローラーアクションのコンテキストに入るまで、バインドするオブジェクトのタイプがわからないため、バインディングを制御できるようにしたいということです。

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 を取得する方法もわかりませんでした。

4

3 に答える 3

12

私がここで行ったように、誰かがグーグルからこの質問に出くわした場合、答えは次のとおりです。モデルバインディングを制御するにはどうすればよいですか?

要するに: TryUpdateModel はあなたが探しているメソッドです。

于 2012-05-31T01:42:44.233 に答える
1

モデルの特定の部分のみを検証したい場合、これは以前MVC Partial Model Updatesに回答した質問と重複している可能性があります。

System.ComponentModel.DataAnnotations.MetadataTypeを使用することの優れた点は、モデル バインダーが、表示/検証メタデータが異なるだけで基本的にベース オブジェクトと同じ派生オブジェクトにバインドし続けることです。

于 2012-04-04T21:27:10.313 に答える
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());
}
于 2012-04-04T20:39:18.683 に答える