【发布时间】:2015-03-27 23:25:24
【问题描述】:
让我们假设以下简化的类结构:
public class Parent
{
public int ID { get; set; }
}
public class ChildA : Parent
{
public string Name { get; set; }
}
public class ChildB : Parent
{
public DateTime Date { get; set; }
}
public class ChildC : Parent
{
public int NumericData { get; set; }
}
public class ViewModel
{
public List<Parent> ChildElements { get; set; }
}
如您所见,在我的视图模型中,我有一个对象列表,但这些对象可以是不同的类型。
现在,我发现编辑器模板在这种情况下运行良好 - @Html.EditorFor() 根据列表中元素的类型根据需要选择正确的编辑器。
但是,我无法将有意义的数据从用户返回到控制器。提交表单后,视图模型包含Parent 元素列表(不是特定的子类型)。更糟糕的是 - 每个 Child 类的特定属性都丢失了!
如何将子类型的所有信息返回给控制器?
【问题讨论】:
-
据 MVC 所知,我假设问题是
public List<Parent> ChildElements { get; set; },在发生绑定之前,它使用父级的默认构造函数。请记住,传入数据是纯文本/文本。模型绑定器将其转换为对象的事实是为了简化工作,但如果您检查您的请求,则它都是关于没有元数据的键值,因此在处理这种情况时请记住这一点。
标签: c# model-view-controller asp.net-core-mvc