Передача модели представления в вспомогательный класс
-
05-07-2019 - |
Вопрос
Я хотел бы отобразить облако тегов в своем тестовом приложении, используя вспомогательный класс для создания HTML.
Я могу использовать цикл for каждого в частичном представлении, чтобы посетить каждый элемент модели.
Inherits="System.Web.Mvc.ViewUserControl < IEnumerable < MyTestproject.Models.TagCount > >
foreach (var item in Model) {
}
Но когда я пытаюсь передать модель классу Helper и использовать для каждого цикла, я получаю следующую ошибку:
public static string DisplayCloud < TagCount >(TagCount objTags) {
..
foreach (var item in objTags) {
}
}
Оператор foreach не может работать с переменными типа TagCount, поскольку TagCount не содержит общедоступного определения для GetEnumerator.
В чем разница или я неправильно передаю?
Решение
Потому что вы передаете другой тип.
Вид становится IEnumerable<TagCount>
Помощник получает TagCount
Ваш вспомогательный код должен быть:
public static string DisplayCloud(IEnumerable<TagCount> objTags) {
..
foreach (var item in objTags) {
}
}
Универсальный тип в методе кажется бесполезным / недопустимым, так как это фактический тип, поэтому я удалил его, а также исправил тип аргумента.
Другие советы
Посмотрите внимательнее на разницу между сигнатурой класса вашего представления и сигнатурой вспомогательного метода:
Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<MyTestproject.Models.TagCount>>
общедоступная статическая строка DisplayCloud<TagCount>(TagCount objTags)
Метод должен получить IEnumerable<TagCount>
для вызова foreach.