2009-12-22 17 views
6

En una ASP: ListView Deseo pasar un objeto completo a un control secundario dentro de ItemTemplate, no solo una sola propiedad del objeto actual.Eval() para el elemento actual en asp: ListView

Este es el código que quiero trabajar:

<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 propiedad Document del DocumentHeader espera que todo el objeto del documento, mientras que el "cuerpo" es una propiedad del documento.

Obviamente, podría crear una nueva propiedad dentro de Document o usar una consulta LINQ para generar una nueva clase con la propiedad que quiero, solo quiero saber si hay una forma más fácil y directa de obtener lo que quiero .

Respuesta

9

Puede enlazar el objeto de contexto usando <% # Container.DataItem%>. Probablemente necesites lanzarlo a lo que el "Documento" espera.

<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

Eso lo hace. No necesité lanzar el artículo, eso fue hecho automáticamente. – spaetzel

Cuestiones relacionadas