我正在尝试将JSON对象列表传递给控制器方法,并自动在控制器中定义和填充正确的类型。
JSON发布到控制器:
{ Type : 'Image', ImageName : 'blah.jpg' },
{ Type : 'Text', Text: 'Hello', Font: 'Some Font' }..
控制器:
public ActionResult SaveCOntent(IList<Item> content)
所以我得到的印象是我需要使用ModelBinding将元素转换为正确的类型。我尝试过另一个建议的帖子(http://stackoverflow.com/questions/6484972/viewmodel-with-listbaseclass-and-editor-templates),它的工作方式..我得到一个正确的'类型的列表'但是所有属性都设置为默认值而不是填充。
我尝试使用以下内容扩展DefaultModelBinder:
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var typeName = (string)bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".ItemTypeName").ConvertTo(typeof(string));
if (typeName == "LINK")
{
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => new Link(), typeof(Link));
base.BindModel(controllerContext, bindingContext);
}
else if (typeName == "IMAGE")
{
//bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => new Image(), typeof(Image));
//base.BindModel(controllerContext, bindingContext);
return null;
}
return base.BindModel(controllerContext, bindingContext);
}
现在这适用于第一种类型(链接),但是当我尝试对Image执行相同操作时,我会收到错误说明
已添加具有相同键的项目。
答案 0 :(得分:1)
原来它工作正常,我的问题是这个对象的基类有一个同名的属性。