Pasar un modelo de vista a la clase auxiliar
-
05-07-2019 - |
Pregunta
Me gustaría mostrar una nube de etiquetas en mi aplicación de prueba usando una clase auxiliar para crear el html.
Puedo usar un para cada ciclo en la vista parcial para visitar cada elemento en el modelo
Inherits="System.Web.Mvc.ViewUserControl < IEnumerable < MyTestproject.Models.TagCount > >
foreach (var item in Model) {
}
Pero cuando trato de pasar el modelo a la clase Helper y uso un para cada ciclo, recibo el siguiente error:
public static string DisplayCloud < TagCount >(TagCount objTags) {
..
foreach (var item in objTags) {
}
}
la instrucción foreach no puede operar en variables de tipo 'TagCount' porque 'TagCount' no contiene una definición pública para 'GetEnumerator'
¿Cuál es la diferencia o la estoy pasando incorrectamente?
Solución
Porque estás pasando un tipo diferente.
La vista se está volviendo IEnumerable<TagCount>
El ayudante está obteniendo TagCount
Su código de ayuda debe ser:
public static string DisplayCloud(IEnumerable<TagCount> objTags) {
..
foreach (var item in objTags) {
}
}
El tipo genérico en el método parece inútil / ilegal, ya que es un tipo real, así que lo eliminé, así como para corregir el tipo de argumento.
Otros consejos
Mire más de cerca la diferencia entre la firma de clase de su vista y la firma de su método auxiliar:
Hereda = " System.Web.Mvc.ViewUserControl < IEnumerable < MyTestproject.Models.TagCount > >
cadena estática pública DisplayCloud < TagCount > (TagCount objTags)
El método debe recibir un IEnumerable<TagCount>
para llamar a foreach.