我有一个这样的模型类:

  public class GenericModel<T> where T : BaseTest
  {
      //Ctor

      public List<T> TestList{get;set;}
  }


因为可以在控制器和视图中进行设置,所以我可以正常工作。
但是我有一个局部视图,所有控制器都可以使用。

我想知道我是否可以在该局部视图中执行以下操作:

@model GenericModel<T>


没有指定泛型类型。我在这里能做什么?使用界面或其他东西?

最佳答案

T定义它是不可能的,因为它需要一个实际的类型来跟随@model语句。

以我的经验,在Visual Studio中使用重构,为GenericModelIGenericModelBaseTestIBaseTest提取一个接口,那么您的模型语句将变为:

@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; }
}

10-06 10:57