【发布时间】:2018-04-23 22:26:06
【问题描述】:
我目前正在开发可用于多种类型内容的内容编辑器,开发人员可以在其中指定自己的模型。例如,模型可能如下所示:
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/form 显示端的绑定工作正常。我的问题是让模型绑定器接受POST 上的数据?我尝试了以下方法,但每个都为model.WidgetModel 返回null:
// 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,因为它会限制此实施的未来计划。
【问题讨论】:
-
问题是当您将模型发布到 api 时 - 模型类型(通常)不会在任何地方编码。您通常会发布类似:
{Id: 1, Name: "name", WidgetModel: {... }}的内容,但(通常)不可能从该信息中推断出您的模型类型。
标签: c# asp.net-core model-binding