为视图模型使用泛型
本文关键字:泛型 模型 视图 | 更新日期: 2023-09-27 17:49:18
我有一个视图,我想给一个模型,但模型可以是2种类型的可能。例子:
public class Super {
public string Name = "super";
}
public class Sub1 : Super {
public string Name = "sub1";
}
public class sub2 : Super {
public string Name = "sub2";
}
我正在尝试使用泛型,并查看其他一些问题,我看到我可以做以下事情,但是,我在类中正确声明变量吗?
public class Generic<T> where T : Super {
public T SubClass { get; set; } //is this ok?
}
如果这是ok的,我将如何添加这样的类模型到视图?
@model Generic<??>
<div>@Model.SubClass.Name</div>
这是可行的吗,我是在正确的轨道上,还是我只是在做一堆什么都不做?
让您的视图使用Super
作为模型:
@model Super
您将能够传递Sub1
或Sub2
,因为它们都继承自Super
。
Razor视图不支持泛型模型——你可以有特定的泛型,比如IEnumerable<int>
,但是你不能有IEnumerable<T>
。
看起来你真的想要虚方法的常规继承,而不是泛型。
public class Super {
public virtual string Name {get {return "super";}}
}
public class Sub1 : Super {
override public string Name {get {return "sub1";}}
}
并简单地使用Super
作为模型类型
@model Super
<div>@Model.Name</div>
附加说明:泛型类彼此之间没有继承关系(Generic<Super>
与Generic<Sub1>
没有任何形式的关系)-所以你不能指定"基"泛型类,并使其合理地用于派生类。下面的模型甚至不允许传递Generic<Sub1>
(你可以通过interface - read"泛型和协方差"来处理)
@model Generic<Super> @* can't pass instance of Generic<Sub1> *@