2013-04-11 32 views
0

有點混亂的標題。如何將動態CSS類分配給位於ListView內的HyperLink

這是我的老導航

<li><a href="General.aspx" runat="server" id="currentGeneral"><i class="home"></i> Overview</a></li> 

的I級設置旁邊的導航標籤的圖標。

在Site.Master.CS上,我檢查了當前頁面,並將其設置爲以下代碼激活。

currentGeneral.Attributes["class"] = "active"; 

所以我改變了導航到一個由數據庫填充的列表視圖。

<asp:ListView ID="ListViewMenu" runat="server" ItemPlaceholderID="menuContainer"> 

<LayoutTemplate> 
    <ul class="menu" id="responsive" runat="server"> 
     <asp:PlaceHolder ID="menuContainer" runat="server" /> 
    </ul> 
</LayoutTemplate> 

<ItemTemplate> 
<li><a href='<%#Eval ("href") %>' class='<%#Eval ("id") %>'> <i class='<%#Eval ("class") %>'></i><%#Eval ("text") %></a></li> 
</ItemTemplate> 

</asp:ListView> 

但現在,我使用列表視圖中,currentGeneral ID不存在,我不能將其設置爲主動。

我在想什麼最好的方式來得到這個工作是。任何人都有建議?

謝謝。

回答

1

如果您想在綁定時訪問ListView內部的單個項目,則可能需要使用ItemDataBound事件的不同方法。

請確保將DataItem轉換爲適合的對象。例如,DataRowView

<asp:ListView ID="ListViewMenu" runat="server" 
    OnItemDataBound="ListViewMenu_ItemDataBound" 
    ItemPlaceholderID="menuContainer"> 
    <LayoutTemplate> 
     <ul class="menu" id="responsive" runat="server"> 
      <asp:PlaceHolder ID="menuContainer" runat="server" /> 
     </ul> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <li> 
      <asp:HyperLink runat="server" ID="HyperLink1" > 
       <i class='<%#Eval ("class") %>'></i><%#Eval ("text") %> 
      </asp:HyperLink> 
     </li> 
    </ItemTemplate> 
</asp:ListView> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     PopulateMenu(); 
    } 
} 

protected void ListViewMenu_ItemDataBound(
    object sender, ListViewItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
     var rowView = e.Item.DataItem as DataRowView; 

     var hyperLink = e.Item.FindControl("HyperLink1") as HyperLink; 
     hyperLink.NavigateUrl = rowView["href"].ToString(); 
     hyperLink.CssClass = rowView["menu"].ToString(); 

     if (Request.Path.ToLower().Contains(rowView["href"].ToString())) 
      hyperLink.CssClass += " active"; 
    } 
} 
void PopulateMenu() 
{ 
    DataAccess da = new DataAccess(); 
    da.AddParameter("ID", ID, DataAccess.SQLDataType.SQLInteger, 4); 
    SiteMenu = da.runSPDataSet("Portal_MenuCreate"); 
    ListViewMenu.DataSource = SiteMenu; 
    ListViewMenu.DataBind(); 
} 
+0

我從數據庫拉導航的原因是由於用戶可能有不同的導航。有些用戶沒有calendarized.aspx,所以我的存儲過程根據用戶填充它。那麼如何通過在頁面加載中設置菜單來計算這一點? – Zach 2013-04-11 21:38:56

+0

只需用您的數據源替換「集合」即可。它應該工作。 (注意我創建它,以便我可以在沒有數據庫的情況下測試它)。 – Win 2013-04-11 21:40:21

+0

對不起。這是一個漫長的一天,我完全忽略了那些沒有注意的問題。 – Zach 2013-04-11 21:44:37