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;
//...
}