4

添加 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>

没有 runat="server" 的 <li> 工作正常,当源代码在正确的页面上显示 class="selected" 或 class="" 时,另一个 <li> 也可以正常工作,直到我决定添加runat="服务器"。

一旦我添加了 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>

它正在将我的服务器标签倒入源代码中!

为什么会出现这种行为?我怎样才能避免它?

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

4

2 回答 2

4

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

您要么需要:

  • 通过您的代码隐藏设置属性
  • 创建一个表达式生成器(以及第 2部分和第 3 部分)并使用<%$ %>语法(注意:这些是我在博客上写的东西的链接所以,请注意自我链接 =)
于 2010-07-30T11:37:08.087 回答
0

根据您的要求,您还可以使用 ASP.NET 菜单和 XmlSiteMap 来做同样的事情。

于 2010-07-30T12:05:00.490 回答