¿Por qué no se puede vincular el modelo de mi vista con mi ViewModel genérico que implementa una interfaz? (ASP.NET MVC 3)
Estoy intentando pasar mi Vista una instancia del siguiente ViewModel:
public class CompanyListViewModel<T> where T : ICompany
{
public IEnumerable<T> CompanyList;
public IEnumerable<string> StateList;
public CompanyListViewModel(IEnumerable<T> list)
{
CompanyList = list;
}
}
Where the View toma algo así:
@model Project.ViewModels.CompanyViewModels.CompanyListViewModel<ICompany>
Y mi código de controlador pasa algo como esto a la Vista:
CompanyListViewModel<ICompanyInListAsUser> model = new CompanyListViewModel<ICompanyInListAsUser>(_companyService.FilterByCompanyState(state));
Donde elICompanyInListAsUser
a interfaz @ implementa laICompany
interfaz. Los_companyService.FilterByCompanyState(state))
class devuelve unIEnumerable
deCompany
objetos, que a su vez implementan elICompanyInListAsUser
interfaz
Por alguna razón, recibo el siguiente error al acceder a mi Vista:
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]'.
¿Por qué recibo este error si elICompanyInListAsUser
interfazhac de hecho implementarICompany
?
Cualquier ayuda sería muy apreciada.
Gracias
EDITA
También quería decir lo que estoy tratando de lograr aquí. Digamos que tengo varios niveles de acceso en mi aplicación (ej. Usuario y Administrador). ¿Qué pasa si tengo una propiedad en miCompany
objeto que es solo de administrador? Bueno, en ese caso, miICompanyInListAsUser
incluiría todas las propiedades que quería como columnas en la listaexcept la propiedad solo para administradores.
Así que mi plan aquí era pasar comoViewModel
unIEnumerable
de la interfaz base de la compañía y desde el controlador (o capa de servicio) puebla selectivamente laIEnumerable
con una instancia de una de estas interfaces de "filtro" comoICompanyInListAsUser
.
spero que esto tenga sentido, avíseme si necesito más detalles.