如何避免添加runat =“server”销毁我的服务器标签<%...%>

时间:2010-07-30 11:29:29

标签: asp.net runatserver server-tags

添加runat =“server”未呈现我的服务器标签<%...%>


我有一个包含少量< 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="&lt;%= Request.Url.AbsoluteUri.EndsWith(&quot;/Blog&quot;) ? &quot;selected&quot; : &quot;&quot; %&gt;"><a href="/Blog">Group Blog</a></li>

它将我的服务器标签倾注到源代码中!

为什么会出现这种行为?我怎么能避免呢?

我在这里看了很多类似的线程,谷歌几乎没有任何东西,所以这样做了,我不认为这是一个重复的问题。

2 个答案:

答案 0 :(得分:4)

您不能在<%= %>属性标记的属性中使用runat="server"语法。

您需要:

  • 通过代码隐藏
  • 设置属性
  • 创建Expression Builder(以及part 2part 3)并使用<%$ %>语法(注意:这些是我在 my 博客,所以,要小心自我链接=)

答案 1 :(得分:0)

根据您的要求,您还可以使用ASP.NET菜单和XmlSiteMap执行相同的操作。