2012-05-23 5 views
1

나는 다음과 같이 내 중계기 내부 DIV 있습니다 중계기에서 DIV의 가시성을 전환하려면 어떻게해야합니까?

<asp:Repeater ID="topicView" runat="server" OnItemCommand="Delete_ItemCommand"> 
    <ItemTemplate> 
    <table width="945px" cellpadding="0" cellspacing="0" border="0" class="post-table"> 
     <tr> 
      <td colspan="2"> 
       <div class="post-info"> 
        <div class="post-info-left"><%#DataBinder.Eval(Container.DataItem, "PostDate")%></div> 
        <div class="post-info-right">#<%#DataBinder.Eval(Container.DataItem, "PostID")%></div> 
        <div class="clear"></div> 
       </div> 
      </td> 
     </tr> 
     <tr> 
      <td class="post-left"> 
       <p><strong><%#DataBinder.Eval(Container.DataItem, "Username")%></strong></p> 
      </td> 
      <td class="post-right"> 
       <p><%#DataBinder.Eval(Container.DataItem, "PostBody")%></p> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <div class="post-edit"> 
        <p id="postEditAdmin" runat="server" visible="false"><a class="fancybox.iframe fancybox" href='editpost.aspx?postID=<%#DataBinder.Eval(Container.DataItem, "PostID")%>'>Edit</a> | <asp:LinkButton ID="deleteBtn" runat="server" Text="Delete" CommandName="Delete" OnClientClick="javascript:if(!confirm('Delete this information? this will delete permanently'))return false;" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "PostID")%>' /></p> 
        <p id="postEdit" runat="server" visible="true"><i>You must be an admin to be able to edit or delete a post</i></p> 
       </div> 
      </td> 
     </tr> 
    </table> 
    </ItemTemplate> 
</asp:Repeater> 

사람이 저를 거짓으로 진실하고 postEdit.Visible에 postEditAdmin.Visible을 설정하는 방법을 알려 수

? 그것은 페이지로드에서 픽업되지 않습니다.

또한 if 문에 따라 변경 될 예정입니다. 이것이 내가 지금까지 가지고있는 것입니다 :

 if (Session["role"].ToString() == "2") 
     { 
      postEditAdmin.Visible = true; 
      postEdit.Visible = false; 
     } 
+0

각 태그를 태그로 묶고 여기에 가시성을 설정해보십시오. (나는 그것이 문제를 일으키는 ID와 함께 여러 HTML 서버 컨트롤이 될 수 있다고 생각하고있다.) – McGarnagle

답변

2

바인딩 프로세스 중에 div를 표시하거나 숨겨야합니다. 리피터에 이벤트를 추가하십시오.

aspx 페이지에서

, HTML 측

void topicView_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      // Show or hid div here 
      System.Web.UI.HtmlControls.HtmlContainerControl postEditAdmin = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("postEditAdmin"); 

      System.Web.UI.HtmlControls.HtmlContainerControl postEdit= (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("postEdit"); 

      if (Session["role"].ToString() == "2") 
      { 
       postEditAdmin.Visible = true; 
       postEdit.Visible = false; 
      }  
     } 
    } 
+0

고마워. "item"이라는 이름이 현재 컨텍스트에 존재하지 않는다고 말하는 것만이 발생합니다. 어떤 아이디어? – dpDesignz

+0

나는 그 구문을 e.Item.ItemType이어야한다. 그 것에 대해 미안하다. 지금 확인해보고 문제가 있으면 알려주십시오. – Adil

+0

안녕하세요. @Adil. 고마워, 그게 "(라벨) 아이템"이야. 내가 문제가있다. – dpDesignz

0

자리 표시 자 컨트롤 내부의 postEditAdmin 및 postEdit 부품 랩을 추가 파일 뒤에 서버 측 코드에

<asp:Repeater ID="topicView" runat="server" OnItemCommand="Delete_ItemCommand" OnItemDataBound="topicView_ItemDataBound"> 

를 추가하고 그에 대한 가시성을 설정합니다

<div class="post-edit"> 
    <asp:PlaceHolder id="postEditAdmin" runat="server" Visible="false"> 
     <p>...</p> 
    </asp:PlaceHolder> 

코드를 피하기 위해 데이터 바인딩을 사용하여 공개 설정을 제어 할 수도 있습니다. -behind :

<asp:PlaceHolder Visible="<%# Eval('PostEditAdminVisible') %>"> 
+0

감사하지만 여전히 같은 문제가 떠오르고 있습니다. 'postEditAdmin.Visible = true; '전에 뭔가를 추가해야합니까? – dpDesignz

+0

@dpDesignz 가시성을 바인딩하는 데이터를 사용해 봤습니까? (위의 두 번째 코드 단편 참조)? 그렇게하면 코드 숨김에서 뒤죽박죽을 할 필요가 없습니다. –

+0

나는 eval에 데이터를 쓰는 방법을 모르겠습니다. 나는 전에 그것을 사용한 적이 없기 때문에 C#의 cs 파일에 대한 마크 업을 모른다. 나는 이것을 다음과 같이 시도했지만 나에게 그것을 적용하는 방법을 확신하지 못했습니다. http://weblogs.asp.net/gunnarpeipman/archive/2010/04/05/asp-net-using-conditionals-in-data-binding-expressions.aspx. 예제 코드를 붙여 넣으시겠습니까? – dpDesignz

관련 문제