sla*_*shp 6 c# asp.net-mvc interface viewmodel asp.net-mvc-3
我试图通过我的View传递以下ViewModel的实例:
public class CompanyListViewModel<T> where T : ICompany
{
public IEnumerable<T> CompanyList;
public IEnumerable<string> StateList;
public CompanyListViewModel(IEnumerable<T> list)
{
CompanyList = list;
}
}
Run Code Online (Sandbox Code Playgroud)
View采用的方式如下:
@model Project.ViewModels.CompanyViewModels.CompanyListViewModel<ICompany>
Run Code Online (Sandbox Code Playgroud)
我的控制器代码将这样的内容传递给View:
CompanyListViewModel<ICompanyInListAsUser> model = new CompanyListViewModel<ICompanyInListAsUser>(_companyService.FilterByCompanyState(state));
Run Code Online (Sandbox Code Playgroud)
凡ICompanyInListAsUser接口实现的ICompany接口.本_companyService.FilterByCompanyState(state))类返回IEnumerable的Company对象,进而实现ICompanyInListAsUser接口.
出于某种原因,访问我的视图时收到以下错误:
The model item passed into the dictionary is of type 'Project.ViewModels.CompanyViewModels.CompanyListViewModel`1[Project.ViewModels.CompanyViewModels.ICompanyInListAsUser]', but this dictionary requires a model item of type 'Project.ViewModels.CompanyViewModels.CompanyListViewModel`1[Project.ViewModels.CompanyViewModels.ICompany]'.
如果ICompanyInListAsUser接口确实实现了,为什么我收到此错误ICompany?
任何帮助将不胜感激.
谢谢.
编辑
我还想说明我想在这里实现的目标.假设我的应用程序中有多个访问级别(例如用户和管理员).如果我的Company对象中的属性是仅限管理员,该怎么办?那么在这种情况下,除了 admin-only属性之外,我ICompanyInListAsUser会在列表中包含我想要的所有属性作为列.
因此,这里我的计划是在通过作为ViewModel一个IEnumerable基础公司接口,并从控制器(或服务层)选择性地填充IEnumerable有像这些"过滤器"的接口之一的实例ICompanyInListAsUser.
希望这是有道理的,如果我需要详细说明,请告诉我.
小智 6
您可以通过使用ViewModel类的接口并将Generic类型声明为Covariant来实现您要完成的任务.像这样:
interface ICompanyListViewModel<out T> where T : ICompany
{
}
Run Code Online (Sandbox Code Playgroud)
这样你也可以使用抽象类而不是公司的接口.
| 归档时间: |
|
| 查看次数: |
4085 次 |
| 最近记录: |