2010-09-09 30 views
1

我正在寫一個MVC應用程序與C#。在這一個特定的部分,我有一個導航條件開關,以突出顯示適當的選項卡。下面是該代碼:問題<%: ... %>與<%= %>當顯示生成的文本

<script type="text/C#" runat="server"> 
    string oController; 
    string oAction; 
    const string current = "class=\"current_page\""; 

    protected override void OnLoad(EventArgs e) 
    { 
     oController = ViewContext.RouteData.Values["controller"].ToString(); 
     oAction = ViewContext.RouteData.Values["action"].ToString(); 

     base.OnLoad(e); 
    } 
</script> 

<div id="menu"> 
    <ul> 
     <li <%= (oController.Equals("Home") ? current : "") %>><a href="/">Home</a></li> 
     <li><a href="/CustomerManager/">Customer Manager</a></li> 
     <!-- <%: oController.Equals("Home") %> --> 
     <!-- <%: oAction %> --> 
    </ul> 
</div> 

在這條線(<li <%= (oController.Equals("Home") ? current : "") %>><a href="/">Home</a></li>)如果我使用<%: %> ASP金塊,而不是<%= %>(如建議,因爲後者被很快淘汰),生成的文本出來作爲

<li class=&quot;current_page&quot;><a href="/">Home</a></li> 

而不是

<li class="current_page"><a href="/">Home</a></li> 

任何sugges tions和/或爲什麼會發生這種情況的原因?謝謝!

回答

4

因爲<%:旨在編碼數據,如用戶輸入。在你的情況下,這是自我生成(可信)的HTML,所以你不要想要來編碼它; <%=是正確的用法。

<%:適用於<%:user.Name%>之類的東西,它可以方便地防止xss等惡意文本在其中發佈。

+0

感謝您的澄清。我閱讀了ASP.NET MVC官方教程之一,在版本4後刪除了<%='。你知道這是否正確嗎? – Anders 2010-09-09 21:04:58

+0

@Anders - 我沒有聽說過,但我覺得它不太可能。對於初學者來說,它會破壞太多的代碼。 – 2010-09-09 21:32:38

+0

'<%='有時候是完全必要的。除非你有充分的理由不要(像你的)那樣使用'<%:'。它沒有被逐步淘汰 – BritishDeveloper 2010-09-09 22:33:57

0

當值不是Home時,您可以讓該類爲空。很明顯,你正在試圖一起忽略它,但它會是一個解決方案。

const string current = "current_page"; 
<li class="<%: (oController.Equals("Home") ? current : "") %>"><a href="/">Home</a></li> 
+0

唯一的問題是如果沒有選擇頁面沒有應用css類。一個空的類標籤對我來說似乎不合適。 – Anders 2010-09-09 21:04:00

相關問題