我有一个包含少量< li>的主页对于菜单,因为我必须为当前页面设置class = selected,我使用一个小的服务器标签来查找url并分配特定的类。
我总共有10个< li>并非所有菜单都适用于所有类型的用户,我需要切换一些< li>如果用户不是管理员,那么我已经添加了runat =“server”,所以我可以通过c#设置他们的visible = false
以下是一目了然的事情:
<li runat="server" id="liBlog" class='<%= Request.Url.AbsoluteUri.EndsWith("/Blog") ? "selected" : "" %>'><a href="/Blog">Group Blog</a></li>
<li runat="server" id="liPoll" class='<%= Request.Url.AbsoluteUri.EndsWith("/Poll") ? "selected" : "" %>'><a href="/Poll">Poll</a></li>
<li id="liInvite" class='<%= Request.Url.AbsoluteUri.EndsWith("/Invite") ? "selected" : "" %>'><a href="/Invite">Invite</a></li>
<li id="liFavourite" class='<%= Request.Url.AbsoluteUri.Contains("/Favourite") ? "selected" : "" %>'><a href="/Favourite">My Favourites</a></li>
&lt; li&gt;没有runat =“server”工作正常,当在正确的页面上时,源代码在适当时显示class =“selected”或class =“”,另一个&lt; li&gt;以前工作也很好,直到我决定添加runat =“server”。
一旦我添加了runat =“server”,就会将整个class =“”发送到html页面,它根本不处理服务器标签!我右键单击html并查看源代码,它呈现为:
<li id="ctl00_ctl00_ContentPlaceHolder1_liBlog" class="<%= Request.Url.AbsoluteUri.EndsWith("/Blog") ? "selected" : "" %>"><a href="/Blog">Group Blog</a></li>
它将我的服务器标签倾注到源代码中!
为什么会出现这种行为?我怎么能避免呢?
我在这里看了很多类似的线程,谷歌几乎没有任何东西,所以这样做了,我不认为这是一个重复的问题。
答案 0 :(得分:4)
您不能在<%= %>
属性标记的属性中使用runat="server"
语法。
您需要:
<%$ %>
语法(注意:这些是我在 my 博客,所以,要小心自我链接=)答案 1 :(得分:0)
根据您的要求,您还可以使用ASP.NET菜单和XmlSiteMap执行相同的操作。