2012-05-10 9 views
1

MVCでモデルバインダーの作成に問題があります。私はのようなルックスをターゲットにしていますMVC 3のカスタムコレクションモデルバインダーに関する問題

アクション:

public ActionResult GetAccounts (ICollection<Account> accounts){} 

私はカスタムモデルバインダーを作成し、次のコードでそれを登録:

ModelBinders.Binders.Add(typeof(ICollection<Account>),new CollectionModelBinder()); 

添付デバッガでは、私が見ることができますCollectionModelBinder's CreateModelメソッドが呼び出されていることを示します。ただし、実行がコントローラのアクションメソッドに達すると、accountsパラメータはnullになります。

問題点を教えてください。

私のモデルバインダーは次のようになります。

public class CollectionModelBinder : DefaultModelBinder 
{ 
    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) 
    { 
     return new List<Account> { 
      new Account {Id = 1}, 
      new Account {Id = 2}, 
      new Account {Id = 3}}; 
    } 
} 

UPDATE:これは、別の内部メソッドと呼ばれていましたDefaultModelBinder.CreateModel後に問題だった

は、UpdateCollectionが呼び出された、効果的にコレクションをゼロにCreateModel.によって作成されました。解決策はIModelBinder.の自分の実装をロールバックすることでしたIModelBinder.BindModelに欠けている唯一の引数はmodelType,ですO得る:CreateModelが呼び出された後にこれはDefaultModelBinder.との問題だった

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    var type = bindingContext.ModelType; 
    //... 
} 

答えて

1

、別の内部方法、UpdateCollectionを効果的に解決策がIModelBinder.の私の独自の実装をロールバックすることでしたCreateModel.によって作成されたコレクションをゼロにされ、呼ばれていましたIModelBinder.BindModelに欠けている唯一の引数は、入手が容易なmodelType,です。

関連する問題