2013-05-15 3 views
1

액세스. 나는 자식 개체 (위치)의 그룹을 반복하고, 각각에 대한 몇 가지 정보를 표시합니다.간단한 Sitecore ASP 리피터 - 나는 여기에 아주 기본적인 sitecore의 질문이 필드

반복을 수행하기 위해 ASP 반복기를 사용하고 있습니다. 페이지로드시 아이들을 얻고 있으며, 정보를 표시하기 위해 sc 태그를 사용하려고합니다. 그러나 표시하지는 않습니다. 페이지에서.

는 아무도 내가 여기에 누락 무엇을보고 나를 도울 수 있습니까? 뒤에

코드 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     var item = Sitecore.Context.Item; 

     var children = new List<Sitecore.Data.Items.Item>(); 
     foreach (var child in item.GetChildren()) 
     { 
      children.Add((Sitecore.Data.Items.Item)child); 
     } 

     LocationsRpt.DataSource = children; 
     LocationsRpt.DataBind(); 
    } 

마크 업 : 내가 대답 후

<asp:Repeater runat="server" ID="LocationsRpt" OnItemDataBound="LocationsRptItemDataBound"> 
    <ItemTemplate> 
     <div class="InnerContentSec clearfix"> 
      <div id="AboutSolar" class="AboutSolar clearfix"> 
       <div class="items"> 
       <h3> 
        <sc:Text runat="server" ID="Title"/> 
       </h3> 
       <div class="LocationBlock clearfix"> 
       <div class="ImgSec"> 
        <sc:Image id="Image" runat="server" Width="185" Height="107" /> 
       </div> 
       <div class="DescSec"> 
        <p><sc:Text ID="ShortDescription" runat="server" /></p> 
       </div> 
       </div> 
       </div> 
      </div> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

그리고 마지막으로 DataItemBound

내가 너무 빨리
protected void LocationsRptItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      var subItem = e.Item.DataItem as Item; 

      if (subItem != null) 
      { 
       var appTitle = e.Item.FindControl("Title") as Sitecore.Web.UI.WebControls.Text; 

       if (appTitle != null) 
       { 
        appTitle.DataSource = subItem.ID.ToString(); 
        appTitle.Field = "Application Title"; 
        appTitle.DataBind(); 
       } 

       var appImage = e.Item.FindControl("Image") as Sitecore.Web.UI.WebControls.Image; 

       if (appImage != null) 
       { 
        appImage.DataSource = subItem.ID.ToString(); 
        appImage.Field = "Location Image"; 
        appImage.DataBind(); 
       } 

       var shortDescription = e.Item.FindControl("ShortDescription") as Sitecore.Web.UI.WebControls.Text; 

       if (shortDescription != null) 
       { 
        shortDescription.DataSource = subItem.ID.ToString(); 
        shortDescription.Field = "Short Description"; 
        shortDescription.DataBind(); 
       } 
      } 
     } 
    } 
+0

컬렉션의 필드를 실제로 사용하는 코드가 없습니다. 그들은 LocationsRptItemDataBound 이벤트 핸들러에 있습니까? –

+0

은 항목 데이터 바운드 이벤트에 내 추가했습니다. –

답변

9

또한과 같이 그것을 할 수 :

Pageload :

protected void Page_Load(object sender, EventArgs e) 
{ 
    LocationsRpt.DataSource = Sitecore.Context.Item.GetChildren(); 
    LocationsRpt.DataBind(); 
} 

마크 업 :이 경우

<asp:Repeater runat="server" ID="LocationsRpt"> 
    <ItemTemplate> 
     <div class="InnerContentSec clearfix"> 
      <div id="AboutSolar" class="AboutSolar clearfix"> 
       <div class="items"> 
       <h3> 
        <sc:Text runat="server" ID="Title" Item="<%# Container.DataItem %>"/> 
       </h3> 
       <div class="LocationBlock clearfix"> 
       <div class="ImgSec"> 
        <sc:Image id="Image" runat="server" Width="185" Height="107" Item="<%# Container.DataItem %>" /> 
       </div> 
       <div class="DescSec"> 
        <p><sc:Text ID="ShortDescription" runat="server" Item="<%# Container.DataItem %>" /></p> 
       </div> 
       </div> 
       </div> 
      </div> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

당신은 데이터 바인딩 이벤트가 필요하지 않습니다.

+2

또한 repeater DataSource를 ''로 설정할 수 있습니다. 당신은 CodeBehind를 없애고 싶습니다. – jammykam

+0

결국이 대답을했습니다. 도와 주셔서 감사합니다! –

+0

필드 중 하나가 multiList 필드 였고 GUIDS가 표시되는 문제가있었습니다. Repeater에서 OnItemDataBound 메서드를 만들고 각 항목에 대해 sitecore로 이동 한 다음 텍스트 문자열을 만들고 전달해야했습니다. – DanO

2

에, 당신은 당신의 이벤트 핸들러 코드를 추가했다.

은 이벤트 핸들러에서 당신은 필드 컨트롤에 대한 Item 속성을 설정해야합니다. 예 : appTitle.Item = item

그리고 이러한 컨트롤에 대해 DataBind()를 호출 할 필요가 없습니다.

또한 item.GetChildren()을 리피터의 데이터 소스로 사용할 수 있으므로 새 목록에 자식을 복사 할 필요가 없습니다.

관련 문제