2012-05-23 46 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> 

任何人都可以讓我知道如何將postEditAdmin.Visible設置爲true,postEdit.Visible假?它不會在頁面加載中被拾取。

另請注意,它將根據if語句進行更改。這是我到目前爲止:

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

嘗試在標記中包裝每個標記並在其中設置可見性。 (我認爲它可能是多個HTML服務器控件,導致該問題的ID相同。) – McGarnagle

回答

2

您必須使div在綁定過程中可見或隱藏。將事件添加到中繼器。

在aspx頁面,HTML側添加

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

在隱藏文件服務器端的代碼添加

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」即將出現,說在當前上下文中不存在名稱「item」。有任何想法嗎? – dpDesignz

+0

我錯過了它應該是e.Item.ItemType的語法,很抱歉。現在檢查它,並告訴我,如果你有任何問題。 – Adil

+0

嘿@Adil。謝謝我這樣做,這是「(標籤)項目」我遇到了麻煩。 – dpDesignz

0

裹的佔位符控件內的postEditAdmin和postEdit部分,並設置了可見性:

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

您還可以使用數據綁定來控制可見性以避免代碼 - 背後:

<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。你能不能粘貼一個示例cs代碼? – dpDesignz