Как избежать добавления runat = "server", уничтожающего теги моего сервера <% ...%> - PullRequest
3 голосов
/ 30 июля 2010

Добавление runat = "server" не отображает теги моего сервера <% ...%>


У меня есть мастер-страница с несколькими

для меню, и так как я должен установить класс= выбран для текущей страницы, я использую небольшой тег сервера, чтобы найти URL и назначить определенный класс.

У меня есть 10

, и не все меню доступны для всех типов пользователей,Мне нужно переключить несколько из , если пользователь не является администратором, поэтому мне добавили runat = "server", чтобы я мог установить их visible = false через c #

Вот как это происходит вВзгляд:

<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" работает нормально, когда на правильной странице исходный код показывает class = "selected" или class = "", в зависимости от ситуации, другой раньше тоже работал нормально, пока я не решил добавить 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>

Он выливает теги моего сервера в исходный код!

Почему наблюдается такое поведение?Как я могу избежать этого?

Я просмотрел много похожих тем здесь, и в Google почти ничего не было, поэтому сделал это, я не думаю, что это дублирующий вопрос.

Ответы [ 2 ]

4 голосов
/ 30 июля 2010

Нельзя использовать синтаксис <%= %> внутри свойств тегов, на которых есть атрибут runat="server".

Вам либо нужно:

  • Установите свойства с помощью кода
  • Создайте Expression Builder часть 2 и часть 3 ) и используйте синтаксис <%$ %> (примечание: это ссылки на материал, который я написал в моем блоге, так что будьте осторожны, ссылка на себя =)
0 голосов
/ 30 июля 2010

по вашему требованию вы также можете использовать меню ASP.NET и XmlSiteMap, чтобы сделать то же самое.

...