如何在视图中设置通用模型
本文关键字:模型 设置 视图 | 更新日期: 2023-09-27 18:00:56
我有一个这样的模型类:
public class GenericModel<T> where T : BaseTest
{
//Ctor
public List<T> TestList{get;set;}
}
我可以很好地处理这个问题,因为我在控制器和视图中设置了它。但我有一个局部视图,所有控制器都可以使用它。
我想知道我是否可以在局部视图中做这样的事情:
@model GenericModel<T>
没有指定泛型类型。我在这里能做什么?使用接口什么的?
不可能用T
定义它,因为它需要一个实际类型来跟随@model
语句。
根据我的经验,在visualstudio中使用重构,为GenericModel
(比如IGenericModel
(和BaseTest
(比如IBaseTest
(提取一个接口,然后您的模型语句变成:
@model IGenericModel<IBaseTest>
更新:
只是为了澄清一下,要提取的接口可能是这样的(注意out
表示差异,如果你使用它,它会让你的生活更轻松(:
public interface IGenericModel<out T> where T : IBaseTest
{
IEnumerable<T> GetAll(); // just as an example
}
public interface IBaseTest
{
T Property { get; }
}
我使用过很多次的一个可能的解决方案是为generic创建一个非泛型基类,使其成为:
public class GenericModel<T> : NormalModel where T:BaseTest
{
}
你的基类可能是这样的:
public abstract class NormalModel
{
public abstract IList ItemsList { get; }
}
(如果它这么简单,你可能只会把它做成一个接口,但我假设它还有更多,而且GenericModel的一些部分不依赖于T,可能会进入基类(。
然后,您的视图可以使用NormalModel
,您只需要在GenericModel
中覆盖它,并为它提供TestList
(以及视图中需要使用的任何其他内容(。