我有一个模型,它看起来像这样:
public class MyModel {
public List<SomeBaseClass> list {get; set;}
public string SomeProperty {get; set;}
}
whereSomeBaseClass
实际上是一个基类,列表可以包含不同类型的项目,但所有这些类型都继承自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";
}
在 action 方法中,我收到了list
属性设置为null的模型对象。这很奇怪,因为绑定器被正确调用并且它正确地填充了模型及其所有属性。
我无法弄清楚我做错了什么。
PS当我尝试调用UpdateModel<MyModel>(model);
action 方法时,它会抛出“无法更新 MyModel 类型的模型”。