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="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>

サーバータグをソースコードに流し込んでいます!

なぜこの動作が見られるのですか?どうすればそれを回避できますか?

私はここで多くの同様のスレッドを調べましたが、グーグルにはほとんど何もなかったので、これを作成しました。これは重複した質問ではないと思います。

4

2 に答える 2

4

<%= %>属性を持つタグのプロパティ内で構文を使用することはできませんrunat="server"

次のいずれかを行う必要があります。

  • コードビハインドを介してプロパティを設定します
  • 式ビルダー(およびパート2パート3)を作成し、<%$ %>構文を使用します(注:これらはブログに書いたものへのリンクなので、自己リンクに注意してください=)
于 2010-07-30T11:37:08.087 に答える
0

要件に応じて、ASP.NETメニューとXmlSiteMapを使用して同じことを行うこともできます。

于 2010-07-30T12:05:00.490 に答える