我目前正在开发一种可用于多种类型内容的内容编辑器,开发人员可以在其中指定自己的模型。例如,模型可能如下所示:
public class ImageWithCopyWidgetModel : WidgetModel, IWidgetModel
{
public string ImageUrl { get; set; }
public string ImageAltText { get; set; }
public string HeaderText { get; set; }
public string BodyContent { get; set; }
}
在编辑器方面,我有一个看起来像的视图模型:
public class EditContentViewModel<TModel> where TModel : IWidgetModel
{
public int Id { get; set; }
public string Name { get; set; }
public TModel WidgetModel { get; set; }
}
我对GET /表格显示端的绑定工作正常。我的问题是让模型绑定器接受POST
上的数据?我尝试过以下操作,但每个都会null
返回model.WidgetModel
:
// Option 1
EditContent(int pageId, int id, EditContentViewModel<dynamic> model)
// Option 2
EditContent(int pageId, int id, EditContentViewModel<object> model)
// Option 3
EditContent(int pageId, int id, EditContentViewModel<IWidgetModel> model)
注意,出于测试目的,我尝试将WidgetModel
的类型明确地设置为具体类(上面提到的ImageWithCopyWidgetModel
)并且这样做。
我真的试图避免在这里使用Request.Form
,因为它将限制此实施的未来计划。
答案 0 :(得分:-1)
你想要的东西是不可能的,至少是开箱即用的。在帖子上,所有的模型绑定器都有一堆键值对字符串。什么告诉它关于如何将这些值绑定到有用的东西的决定是动作参数。具体来说,当您绑定到ImageWithCopyWidgetModel
时,它无法知道它应该实际创建EditContentViewModel
的实例。
此外,模型绑定器旨在丢弃它不知道如何处理的值。这意味着遗憾的是,事实之后甚至无法强制转换为ImageWithCopyWidgetModel
,因为EditCopyViewModel
上没有的所有属性都会被丢弃。
您最好的选择是自定义模型绑定器,但是对于Stack Overflow的范围来说,它的实现过于宽泛。我建议你参考documentation。