2008-12-03 69 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"; 
相关问题