2011-02-05 5 views
1

私はこのようになりますアクションがあります。デフォルトのモデルバインダーは常にインスタンスを作成しますか?

public ActionResult Index(Home document) { 

     return View(new BaseViewModel<Home>(document, _repository)); 
    } 

しかしRouteData.Values [「ドキュメント」]はモデルバインダーは、ホームのインスタンスを作成し、存在しないにも関わらずに。ドキュメントバインダーがnullの場合、モデルバインダーにnullを渡すことは可能ですか?あなたは、このデフォルトの動作を変更したい場合は、カスタムモデルバインダーを必要とする場合があります

答えて

2

public class MyModelBinder : DefaultModelBinder 
{ 
    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) 
    { 
     // TODO: decide if you need to instantiate or not the model 
     // based on the context 
     if (!ShouldInstantiateModel) 
     { 
      return null; 
     } 
     return base.CreateModel(controllerContext, bindingContext, modelType); 
    } 
} 

、その後:

public ActionResult Index([ModelBinder(typeof(MyModelBinder))] Home document) 
{ 
    return View(new BaseViewModel<Home>(document, _repository)); 
} 

またはApplication_Startでグローバルに登録する:

ModelBinders.Binders.Add(typeof(Home), new MyModelBinder()); 
+0

もう一度ありがとう – Marcus

+0

私のroutedataオブジェクトでは、私の価値はドキュメントと呼ばれています。特定のインタフェースを実装するすべてのモデルをバインドするモデルバインダーを記述しますか?したがって、たとえ私が言っても、Public ActionResult(Home myhomepage)は、myocomepageをIDocumentModelを実装しているのでRouteData ["document"]の値でバインドしますか? – Marcus

関連する問題