2010-06-22 30 views
1

對於解決方案,我不能使用任何回發方法,因爲這都是通過ajax工作的。解決方案需要在asp.net代碼中實現。Repeater Repeater數據綁定(無回傳)

我有一個List<WebPage>,其中包含一個鏈接列表(List<Link>),我需要所有的鏈接來綁定重複的信息,如頁面標題,編號,網址。這是我目前的中繼器。

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

當然這不工作,我該怎麼做?

感謝您的幫助!

+0

我敢肯定你會在這裏找到有用的例子http://stackoverflow.com/questions/2923137 /直放站中繼器 – marapet 2010-06-22 19:16:57

+0

不是,我已經看了。我真的需要一個asp.net解決方案。我不能在基於ajax的網站上做這樣的事情。 – Pierluc 2010-06-22 19:19:01

+0

通過ajax及其返回的html代碼調用頁面,包含轉發器的實際頁面對用戶而言永遠不可見。在頁面的加載方法結束之後,頁面html代碼在jQuery插件的幫助下返回並「綁定」。 – Pierluc 2010-06-22 19:37:11

回答

1

我假設你在這裏試圖解決的問題是如何在嵌套對象中包含多個層次的屬性 - 頂層的一些屬性,而下層的其他屬性。一個簡單的方法是將內部集合轉換爲一種新類型,其中包含您需要的所有屬性的組合。

這裏的說明使用IEnumerable.Select和C#匿名類來創建一個新的類這種技術代碼示例:

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