2010-06-22 24 views
1

Pour la solution, je ne peux pas utiliser de méthodes de postback, car tout cela fonctionne avec ajax. La solution doit être implémentée dans le code asp.net.Répéteur dans la liaison de données de répéteur (sans publication)

J'ai un List<WebPage> qui contient une liste de liens (List<Link>) et j'ai besoin de tous les liens pour lier des informations répétitives telles que le titre de la page, l'ID, l'URL. Voici mon répéteur actuel.

<div id="result"> 
    <asp:Repeater runat="server" id="results"> 
     <Itemtemplate> 
      <asp:Repeater runat="server" datasource='<%# Eval("Links") %>'> 
       <Itemtemplate> 
        <tr class="gradeX odd"> 
         <td><%# Eval("Id") %></td> //property of WebPage (part of results repeater) 
         <td><%# Eval("Title") %></td> //property of WebPage (part of results repeater) 
         <td><%# Eval("Url") %></td> //property of WebPage (part of results repeater) 
         <td><%# Eval("URL") %></td>//Property of Link 
         <td><%# Eval("URLType") %></td> //Property of Link 
         <td><%# Eval("URLState") %></td> //Property of Link 
        </tr> 
       </Itemtemplate> 
       </asp:Repeater> 
     </Itemtemplate> 
    </asp:Repeater> 
</div> 

bien sûr cela ne fonctionne pas, comment puis-je faire cela?

Merci pour votre aide!

+0

Je suis sûr que vous trouverez un exemple utile ici http://stackoverflow.com/questions/2923137/repeater-in-repeater – marapet

+0

Pas vraiment, je l'ai déjà regardé. J'ai vraiment besoin d'une solution asp.net. Je ne peux pas faire de telles choses dans un site Web basé sur ajax. – Pierluc

+0

la page est appelée via ajax et son code html de retour, la page réelle qui contient le répéteur n'est jamais visible pour l'utilisateur. Une fois la méthode de chargement de la page terminée, le code html de la page est renvoyé et "lié" à l'aide des plugins jQuery. – Pierluc

Répondre

1

Je suppose que le problème que vous essayez de résoudre ici est comment inclure des propriétés de plusieurs niveaux dans un objet imbriqué - certaines propriétés du niveau supérieur mais d'autres propriétés du niveau inférieur. Un moyen facile de le faire est de transformer la collection interne en un nouveau type qui contient un mélange de toutes les propriétés dont vous avez besoin.

Voici un exemple de code illustrant cette technique en utilisant IEnumerable.Select et C# Anonymous classes pour créer une nouvelle classe:

<%@ Page Title="Home Page" Language="C#" %> 
<div id="result"> 
    <asp:Repeater runat="server" id="results"> 
     <ItemTemplate> 
      <asp:Repeater runat="server" datasource='<%# ((WebPage)Container.DataItem).Links.Select (link => new { 
           Id = ((WebPage)Container.DataItem).Id, 
           Title = ((WebPage)Container.DataItem).Title, 
           Url = ((WebPage)Container.DataItem).Url, 
           URL = link.URL, 
           URLType = link.URLType, 
           URLState = link.URLState 
           }) %>'> 
       <ItemTemplate> 
        <tr class="gradeX odd"> 
         <td><%# Eval("Id") %></td> <!--property of WebPage (part of results repeater) --> 
         <td><%# Eval("Title") %></td> <!--property of WebPage (part of results repeater) --> 
         <td><%# Eval("Url") %></td> <!--property of WebPage (part of results repeater) --> 
         <td><%# Eval("URL") %></td><!--Property of Link --> 
         <td><%# Eval("URLType") %></td> <!--Property of Link--> 
         <td><%# Eval("URLState") %></td> <!--Property of Link --> 
        </tr> 
       </ItemTemplate> 
       </asp:Repeater> 
     </Itemtemplate> 
    </asp:Repeater> 
</div> 

<script runat="server"> 
    public class Link 
    { 
     public string URL { get; set; } 
     public int URLType { get; set; } 
     public int URLState { get; set; } 
    } 
    public class WebPage 
    { 
     public string Id { get; set; } 
     public string Title { get; set; } 
     public string Url { get; set; } 
     public List<Link> Links { get; set; } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     WebPage[] pages = new WebPage[] 
     { 
      new WebPage { Id = "foo", 
       Title = "foobar", 
       Url = "http://foo.bar", 
       Links = new List<Link> (new Link[] { 
        new Link {URL = "http://something", URLType = 1, URLState = 2}, 
        new Link {URL = "http://someotherthing", URLType = 3, URLState = 4} 
       }) 
      }, 
      new WebPage { Id = "excellent", 
       Title = "excellent Title", 
       Url = "http://excellent.com", 
       Links = new List<Link> (new Link[] { 
        new Link {URL = "http://excellent", URLType = 5, URLState = 6}, 
        new Link {URL = "http://totallyexcellent", URLType = 7, URLState = 8} 
       }) 
      } 

     }; 
     results.DataSource = pages; 
     results.DataBind(); 
    } 
</script>