2010-08-01 10 views
0

Je suis en train d'obtenir une liste de tous zone dans ma base de données:Vous ne pouvez pas postuler?

public ActionResult Index() 
{ 
    var carreras = repo.FindAllCarreras().ToList(); 
    AreaRepository area = new AreaRepository(); 
    ViewData["Areas"] = area.FindAllAreas(); //Return IQueryable<> 
    return View("Index", carreras); 
} 

Et dans la vue:

<% foreach (var area in ViewData["Areas"]) 
     { %> 
      <p><%: area %></p> 
    <% } %> 

Je reçois une erreur:

foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'

Je pense le meilleur itinéraire serait de modifier la requête dans le CarreraController et de créer une requête linq qui retourne tous les noms et l'enregistre dans un List<string> simple.

Comment puis-je y parvenir?

ViewData["Areas"] = area.FindAllAreas().Select(???? 

Répondre

2

ViewData est un dictionnaire de chaîne à objet. Donc, vous faites essentiellement

object o = ViewData["Areas"]; 
foreach(var area in o) 
... 

Il suffit d'utiliser un casting:

foreach(var area in (WhateverYourCollectionTypeIs)ViewData["Areas"]) 
0

cast ViewData [ "zones"] à (IEnumerable<AREATYPE>)ViewData["Areas"]

+0

Je ne sais pas ce que je devrais CASTING à. Area est une table DB et utilise Linq-to-SQL comme ORM. Quel devrait être le type IEnumarable? : \ –

+0

@Sergio le même type que vous obtenez dans votre 'IQueryable <>' de 'FindAllAreas'. –

+0

@Sergio Tapia tout ce qui est retourné par la méthode 'FindAllAreas()'. Probablement quelque chose comme 'Area'. – Necros

Questions connexes