2008-12-03 68 views
2

我正在生成一個菜單,其中包含綁定到XmlDataSource的Repeater控件。ASP.NET:以編程方式設置HTML元素的樣式

<asp:Repeater ID="myRepeater" runat="server" 
    DataSourceID="myDataSource" 
    onitemdatabound="myRepeater_ItemDataBound" 
    onitemcreated="myRepeater_ItemCreated"> 
    <HeaderTemplate> 
     <ul class="menu_list"> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li id="liMenu" runat="server"><asp:HyperLink ID="hrefMenuItem" runat="server" Text='<%# XPath("@text")%>' NavigateUrl='<%# XPath("@href")%>'></asp:HyperLink></li> 
    </ItemTemplate> 
    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
</asp:Repeater> 
<asp:XmlDataSource runat="server" ID ="myDataSource" XPath="Menu/Items/*" EnableCaching="False" /> 

我希望能夠根據鼠標懸停事件和當前選定的菜單項設置包含LI的樣式。我嘗試通過HtmlGenericControl,但我收到一個錯誤,它是隻讀的。

protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
       HyperLink hrefCurrentMenuLink = e.Item.FindControl("hrefMenuItem") as HyperLink; 
       HtmlGenericControl l_genericControl = e.Item.FindControl("liMenu") as HtmlGenericControl; 

       if ((hrefCurrentMenuLink != null) && (l_genericControl != null)) 
       { 
        string l_currentPage = GetCurrentWebPage(); 

        if (String.Compare(Path.GetFileNameWithoutExtension(hrefCurrentMenuLink.NavigateUrl), l_currentPage, StringComparison.OrdinalIgnoreCase) == 0) 
         l_genericControl.Style = "on-nav"; 
        else 
         l_genericControl.Style = "off-nav"; 

        l_genericControl.Attributes.Add("onmouseover", "navOn(this)"); 
        l_genericControl.Attributes.Add("onmouseout", "navOff(this)"); 
       } 
      } 
     } 

有沒有辦法做到這一點?

回答

5

style屬性是一個集合。這樣做:

l_genericControl.Style.Add("css-name", "css-value") 

或者,如果您使用的CSS類,然後更改CssClass屬性:

l_genericControl.CssClass = "on-nav"; 

如果你想與您的JavaScript切換CSS類,嘗試這樣的事情(未經測試):

l_genericControl.Attributes.Add("onmouseover", "this.className='on-nav';"); 
l_genericControl.Attributes.Add("onmouseout", "this.className='off-nav';"); 

如果你想改變你的JavaScript的風格,這可能工作:

l_genericControl.Attributes.Add("onmouseover", "this.style.color='red'; this.style.backgroundColor='yellow';"); 
l_genericControl.Attributes.Add("onmouseout", "this.style.color='black'; this.style.backgroundColor='none';"); 
+0

它修復似乎我無法訪問CssClass屬性。 – Bullines 2008-12-03 21:55:31

0

在基礎層面上,你可以這樣做:

l_genericControl.Attributes["class"] = "on-nav"; 
0

的問題是這一部分:

l_genericControl.Style = "off-nav"; 

,您可以通過應用的CssClass代替

// += to prevent overwriting a class you would set in the markup 
l_genericControl.CssClass += "off-nav"; 
相關問題