Я пытаюсь передать моему View экземпляр следующего ViewModel:
public class CompanyListViewModel<T> where T : ICompany
{
public IEnumerable<T> CompanyList;
public IEnumerable<string> StateList;
public CompanyListViewModel(IEnumerable<T> list)
{
CompanyList = list;
}
}
Где View принимает что-то вроде этого:
@model Project.ViewModels.CompanyViewModels.CompanyListViewModel<ICompany>
И код моего контроллера передает что-тоаналогично представлению View:
CompanyListViewModel<ICompanyInListAsUser> model = new CompanyListViewModel<ICompanyInListAsUser>(_companyService.FilterByCompanyState(state));
, где интерфейс 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
есть свойство, предназначенное только для администратора?В таком случае, мой ICompanyInListAsUser
будет включать все свойства, которые я хотел, в качестве столбцов в списке , за исключением свойства только для администратора.
Таким образом, мой план состоял в том, чтобы передать как ViewModel
и IEnumerable
интерфейс базовой компании и из контроллера (или уровня обслуживания) выборочно заполнить IEnumerable
экземпляром одного из них "Фильтровать "интерфейсы, такие как ICompanyInListAsUser
.
Надеюсь, это имеет смысл, пожалуйста, дайте мне знать, если мне нужно уточнить.