2009-12-22 9 views
6

W ASP: ListView Chcę przekazać cały obiekt do elementu podrzędnego w ItemTemplate, a nie tylko jednej właściwości bieżącego obiektu.Eval() dla bieżącego elementu w asp: ListView

Oto kod Chcę pracować:

<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> 

Właściwość Dokument DocumentHeader oczekuje cały obiekt Document, podczas gdy „ciało” jest właściwością dokumentu.

Oczywiście mogłem po prostu utworzyć nową właściwość w dokumencie lub użyć zapytania LINQ do wygenerowania nowej klasy z właściwością, którą chcę, chcę tylko wiedzieć, czy istnieje łatwiejszy, bardziej bezpośredni sposób na uzyskanie tego, co chcę .

Odpowiedz

9

Można powiązać obiekt kontekstowy za pomocą <% # Container.DataItem%>. Prawdopodobnie będziesz musiał rzucić go do tego, czego oczekuje "Dokument".

<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

To robi. Nie musiałem rzucać przedmiotu, który został zrobiony automatycznie. – spaetzel

Powiązane problemy