2009-12-22 6 views
6

Dans un ASP: ListView Je souhaite transmettre un objet entier à un contrôle enfant dans ItemTemplate, pas seulement une seule propriété de l'objet actuel.Eval() pour l'élément actuel dans asp: ListView

Voici le code que je veux travailler:

<asp:ListView ID="answers" runat="server"> 
    <LayoutTemplate> 
     <div id="itemPlaceholder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <div> 
      <uc2:DocumentHeader runat="server" Document="Eval(%# Eval("this") %> /> 
       <p><%# Eval("Body") %></p> 
     </div> 
    </ItemTemplate> 
</asp:ListView> 

La propriété Document de la DocumentHeader attend l'ensemble de l'objet Document, tandis que « Body » est une propriété du document.

Évidemment, je pourrais juste créer une nouvelle propriété dans Document ou utiliser une requête LINQ pour générer une nouvelle classe avec la propriété que je veux, je veux juste savoir s'il y a un moyen plus facile et plus direct d'obtenir ce que je veux .

Répondre

9

Vous pouvez lier l'objet de contexte à l'aide de <% # Container.DataItem%>. Vous aurez probablement besoin de le projeter selon le "Document" attendu.

<asp:ListView ID="answers" runat="server"> 
    <LayoutTemplate> 
     <div id="itemPlaceholder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <div> 
      <uc2:DocumentHeader runat="server" Document="<%# Container.DataItem %>" /> 
      <p><%# Eval("Body") %></p> 
     </div> 
    </ItemTemplate> 
</asp:ListView> 
+2

Cela fonctionne. Je n'avais pas besoin de lancer l'objet, cela a été fait automatiquement. – spaetzel