2009-10-21 9 views
0

Je souhaite afficher un nuage de tags dans mon application de test en utilisant une classe d'assistance pour créer le code HTML.Passer un modèle de vue à la classe d'assistance

Je peux utiliser une pour chaque boucle dans la vue partielle de visiter chaque élément dans le modèle

Inherits="System.Web.Mvc.ViewUserControl < IEnumerable <MyTestproject.Models.TagCount> > 

foreach (var item in Model) { 

} 

Mais lorsque je tente de passer le modèle à la classe d'assistance et d'utiliser un pour chaque boucle que je reçois la erreur suivant:

public static string DisplayCloud <TagCount>(TagCount objTags) { 

.. 
     foreach (var item in objTags) { 

     } 
} 

foreach ne peut pas fonctionner sur des variables de type 'TagCount' parce que 'TagCount' ne contient pas de définition publique pour 'GetEnumerator'

Quelle est la différence ou est-ce que je la passe incorrectement? Parce que vous passez un type différent.

Répondre

1

La vue devient IEnumerable<TagCount>

L'aide devient TagCount

Votre code d'aide doit être:

public static string DisplayCloud(IEnumerable<TagCount> objTags) { 

.. 
     foreach (var item in objTags) { 

     } 
} 

Le type générique sur la méthode semble inutile/illégal, puisqu'il est un type réel, donc je l'ai supprimé, ainsi que la fixation du type d'argument.

+0

Fait le changement, a couru le code et bien sûr cela fonctionne un régal. À votre santé! –

+0

Assurez-vous de repondre aux questions qui vous ont aidé. :) –

1

Regardez de plus près à la différence entre la signature de la classe et la signature de votre méthode d'assistance de votre point de vue:

Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<MyTestproject.Models.TagCount>>

public static string DisplayCloud<TagCount>(TagCount objTags)

La méthode doit recevoir un IEnumerable<TagCount> pour appeler foreach.

+0

Merci, mais comment je le passe correctement J'utilise actuellement ce qui suit: <% = TagCloudHelper.DisplayCloud (Model)%> –

+0

Vous le transmettez correctement en supposant que Model est un IEnumerable , mais votre signature de méthode doit être modifié pour accepter ce paramètre. –

+0

Malheureusement, je ne sais pas comment faire cela, voulez-vous dire quelque chose comme ça?: Chaîne statique publique DisplayCloud IEnumerable (TagCount objTags) –

Questions connexes