【发布时间】:2021-12-02 20:57:09
【问题描述】:
是否可以为嵌套的继承对象创建自定义模型绑定器? 看到这篇文章https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-5.0,但是我的情况比较难,我的对象很复杂。
例如,我有这个简单的结构:
一级
public class Top
{
public string Value { set; get; }
public IEnumerable<MiddleBase> MiddleClasses { set; get; }
}
二级
public abstract class MiddleBase
{
public ConcreteMiddleType Type { set; get; }
public IEnumerable<BottomBase> BottomClasses { set; get; }
}
public class ConcreteMiddle1 : MiddleBase
{
public string Value1 { set; get; }
}
public class ConcreteMiddle2 : MiddleBase
{
public string Value2 { set; get; }
}
第三级
public abstract class BottomBase
{
public ConcreteBottomType Type { set; get; }
}
public class ConcreteBottom1 : BottomBase
{
public string Value1 { set; get; }
}
public class ConcreteBottom2 : BottomBase
{
public string Value2 { set; get; }
}
如果我处理请求我得到错误,我不能绑定基抽象类。
有人遇到过此类问题吗?
【问题讨论】:
-
有点道理,因为你不能实例化抽象类。一种可能的(天真的)解决方案可能是维护您的具体类型的列表。但我想这有点违背继承的目的,因为每次添加类型时,都需要添加一个列表,以及一些将正确元素放入列表的代码。老实说,我认为您最好在将数据传递给视图并将所有对象映射到某种视图模型时删除整个继承内容,该视图模型包含所有实现的所有属性和鉴别器
-
最好能提供更多关于如何在控制器中使用这些类的详细信息
标签: c# asp.net-core model-binding custom-model-binder