私はモデルを持っています、そしてそれはこのように見えます:
public class MyModel {
public List<SomeBaseClass> list {get; set;}
public string SomeProperty {get; set;}
}
ここSomeBaseClass
で、は実際には基本クラスであり、リストにはさまざまなタイプのアイテムを含めることができますが、これらのタイプはすべてから継承されSomeBaseClass
ます。
モデルが正しくバインドされるようにするには、フォームデータに基づいてモデルに入力するカスタムバインダーを実装する必要がありました。
public class MyModelBinder: DefaultModelBinder
{
public override object BindModel(ControllerContext cntxt, ModelBindingContext bindingContext)
{
var model = new MyModel {
list = new List<SomeBaseClass>(),
SomeProperty = ...
};
... // some data mangling and type twisting here
return model; // here the debugger shows that the model's list is populated properly based on the form data.
}
}
しかし、ビューがアクションを呼び出すとき、私のモデルは完全ではありません:
public string SomeAction(MyModel model) { // <~~ It calls the custom binder before coming to here, which is correct
// As the result, the model variable is an instance of MyModel, but the list is null
return "somethhing";
}
アクションメソッドでは、list
プロパティがnullに設定されたモデルオブジェクトを受け取ります。これは奇妙なことです。バインダーが正しく呼び出され、モデルとそのすべてのプロパティが適切に読み込まれるためです。
何が間違っているのか理解できません。
PSアクションメソッドを呼び出そうとするとUpdateModel<MyModel>(model);
、「タイプMyModelのモデルを更新できませんでした」というメッセージが表示されます。