2011-08-30 7 views
0

이 코드 세트가 무엇이 문제인지 파악할 수 없습니다. 내 프런트 엔드를 가지고 :문자열과 객체의리스트가있는 중첩 된 중계기

다음
<asp:Repeater ID="ArchiveYearRepeater" runat="server" OnItemDataBound="ArchiveYearRepeater_ItemDataBound"> 

    <ItemTemplate> 
     <div class="ArchiveYear"> 
      <h3><% DataBinder.Eval(Container.DataItem); %></h3> 
      <ul> 
       <asp:Repeater ID="ArchivePostRepeater" runat="server"> 
        <ItemTemplate> 
         <li><a href="<% DataBinder.Eval(Container.DataItem, "URL"); %>"><% DataBinder.Eval(Container.DataItem, "Title"); %></a></li> 
        </ItemTemplate> 
       </asp:Repeater> 
      </ul> 
     </div> 
    </ItemTemplate> 

</asp:Repeater> 

난 뒤에 내 코드가 있습니다

protected void Page_Load(object sender, EventArgs e) 
     { 


      ArchiveYearRepeater.DataSource = GetYears(); 
      ArchiveYearRepeater.DataBind(); 

     } 
     protected List<ArchiveItem> GetArchiveItems() 
     { 
      List<ArchiveItem> ArchiveItems = new List<ArchiveItem>(); 
      List<BlogPost> posts = BlogPostManager.GetBlogPosts(0, BlogPostManager.BlogSection()); 

      foreach (BlogPost post in posts) 
      { 
       ArchiveItem archiveRecord = new ArchiveItem(); 
       archiveRecord.Title = post.Title; 
       archiveRecord.Link = post.URL; 
       archiveRecord.Date = post.Date; 
       archiveRecord.Year = post.Date.ToString("yyyy"); 
       ArchiveItems.Add(archiveRecord); 
      } 

      return ArchiveItems; 
     } 
     protected List<string> GetYears() 
     { 
      List<string> Years = new List<string>(); 
      List<ArchiveItem> ArchiveItems = new List<ArchiveItem>(); 
      ArchiveItems = GetArchiveItems(); 
      foreach (ArchiveItem item in ArchiveItems) 
      { 
       if(!Years.Contains(item.Year)){ 
        Years.Add(item.Year); 
       } 
      } 

      return Years; 
     } 
     private void ArchiveYearRepeater_ItemDataBound(object sender, 
    System.Web.UI.WebControls.RepeaterItemEventArgs e) 
     { 
      RepeaterItem item = e.Item; 
      if ((item.ItemType == ListItemType.Item) || 
       (item.ItemType == ListItemType.AlternatingItem)) 
      { 
       Repeater ArchivePostRepeater = new Repeater(); 
       ArchivePostRepeater = (Repeater)item.FindControl("ArchivePostRepeater"); 

       ArchivePostRepeater.DataSource = GetArchiveItems(); 
       ArchivePostRepeater.DataBind(); 
      } 
     } 

내가 가장 외부 중계기 블로그 게시물 "의 주요 데이터 세트에서 발견되는 년 반복 만들려고 노력하고 있어요 ". 그런 다음 내부 중계기는 그 해에 속하는 각 게시물을 작성하려고합니다. 나는 셰프를 사용하고 있기 때문에이 문제는 디버깅 할 수없는 오류를 던지고있다. 당신은 열기/닫기 UL 태그를 처리 할 수 ​​<HeaderTemplate><FooterTemplate> 태그를해야

+0

-1, 어떤 오류가 발생합니까? 어디에서 오류가 발생합니까? –

답변

0

귀하의 주요 문제는 당신이 적절한 데이터 바인딩 구문이 없다는 것입니다 귀하의 aspx 코드. 그것은해야한다 : 그것은 문자열 목록이기 때문에

<%# DataBinder.Eval(Container.DataItem, "URL") %> 

또한, 첫 번째 데이터 바인딩 호출에서 다음과 같은 작업을 수행 할 수 있습니다 그 너머

<%# Container.DataItem %> 

, 당신의 논리와 몇 가지 다른 문제가 있습니다 ItemDatabound 이벤트 매년 같은 GetArchiveItems를 호출합니다. 즉, 매년 ArchiveItem 전체 목록을 얻을 수 있습니다. 현재 바인딩 된 연도를 검색하여 GetArchiveItems 함수에 전달하여 해당 연도와 관련된 항목 만 검색 할 수 있어야합니다.

또한 ArchivePostRepeater 변수를 새 Repeater() 객체로 초기화 할 필요가 없습니다. 그 이후에 바로 다른 객체로 설정하기 때문입니다. 처음에는 null로 설정할 수 있습니다.