2009-09-21 3 views
0

J'ai une application sur laquelle je veux faire une boucle dans certaines données où un drapeau dans les données est mis à 1 ou 2 et l'imprimer à l'écran.Imprimer les données à l'écran en fonction d'une requête dans ASP.NET MVC?

L'idée que je travaille sur l'utilisation est d'un des tutoriels MVC:

<ul> 
<% For Each m As Movie In ViewData.Model%> 
    <li><%= m.Title %></li> 
<% Next%> 
</ul> 

Mais je veux faire semblable à ce qui précède, mais en utilisant une instruction LINQ pour saisir les données requises.

Comment faire cela?

J'ai commencé avec une copie à peu près identique du code ci-dessus, ce qui, je le sais, ne fera pas l'affaire mais je ne faisais que voir ce qu'il faisait avec mes données.

<table cellpadding="0" cellspacing="0" width="643"> 
     <% For Each Ticket As hdCall In ViewData.Model%> 
      <tr> 
       <td width="54" class="ticketList">&nbsp;</td> 
       <td width="182" class="ticketList"><%=Ticket.Title%></td> 
       <td width="88" class="ticketList"></td> 
       <td width="148" class="ticketList"></td> 
       <td width="58" class="ticketList"></td> 
       <td width="115" class="ticketList"></td> 
      </tr> 
     <% Next%> 
</table> 

Répondre

0

Votre vue ne doit pas contenir la requête du tout. Votre modèle devrait déjà être rempli avec ce qu'il doit montrer. Votre foreach d'origine était correcte. Normalement, j'appelle une requête dans ma couche d'accès aux données à partir de mon contrôleur et je remplis le modèle avec les résultats. Par exemple:

this.Model = _ticketRepository.FindAllUpcoming(); return View();

0

Vous pouvez ajouter une clause where:

<% For Each Ticket As hdCall in ViewData.Model.Where(m => m.IsUpcoming==true) %> 

Mais à mon avis, appartient dans le modèle (ou le contrôleur).

+0

si je devais le faire dans le contrôleur, comment pourrais-je aller sur l'impression des résultats en forme de boucle à l'écran? – LiamGu

+0

Dans ce cas votre boucle sera toujours la même que dans votre question originale – jao

1

Je ne suis pas sûr que ce soit une bonne idée. Votre vue devrait être aussi "légère" que possible, et elle commencerait à devenir très lourde si vous commenciez à y mettre des requêtes Linq.

Une meilleure approche consiste à extraire des données dans votre méthode de contrôleur, à l'aide d'une requête Linq qui extrait ces données d'un objet de référentiel. Consultez les tutoriels NerdDinner pour plus d'informations à ce sujet. Quoi qu'il en soit, comme le souligne Jao, vous pouvez passer un IQueryable à la vue, et l'itération sur celle-ci ressemble fondamentalement à celle d'un IEnumerable. Donc, si tout ce que vous faites est en train d'énumérer la collection, cela semble plutôt propre.

Questions connexes