2009-02-25 84 views
0

以下asp標籤無法在瀏覽器中顯示,有人可以請 告訴我我做錯了什麼。我期望看到價值<abc>,而不是 我什麼也得不到。標籤文本屬性和實體

<asp:Label ID="Label1" runat="server" Text="&lt;abc&gt;"></asp:Label> 

順便說一句,我知道我可以做到同樣的事情做了以下內容:

<asp:label id="Message1" runat="server"> &lt;abc&gt; </asp:Label> 

但是,這是不是真的是我要求的,我想知道的是,如果什麼使用一個字符串,如"&lt;abc&gt;"在一個屬性值爲一個ASP元素是否允許。換句話說,這是一個ASP.Net錯誤還是這種設計行爲,如果是設計,這種設計的原因是什麼?

非常感謝。

回答

4

信不信由你,但你可以包括實體沒有逃脫他們,這樣的:

<asp:Label runat="server" ID="myLabel" Text="<abc>" /> 

這將呈現一個<ABC>標籤。

編輯: OK,對不起,你要顯示的支架,不作標籤,當然.. 在Text屬性使用實體引用可以得到同樣的結果 - 一個(不可見)<ABC>標籤 - 因爲它們是在服務器端解析標籤時被翻譯的。你必須做的是:

<asp:Label runat="server" ID="myLabel" Text="&amp;lt;abc&amp;gt;" /> 

這將給期望的結果 - 在&放大器;實體引用將向客戶端呈現&符號。接着是lt;,結果是正確的客戶端實體參考(& lt;)。這將呈現爲<

要明確回答您的問題:是的,使用ASP.NET屬性中的實體引用顯然是可以的,因爲它是XML格式。這對微軟來說並不是一個「決定」(當然不是一個錯誤) - 我簡直就是XML。

訣竅在於實現何時解析實體引用(何時在服務器上解析標籤)以及生成的文本是什麼,這將發送到客戶端。

0

是的,當然是允許的。標籤控制的目的是向客戶顯示文本和標記。我認爲這非常有用。注入代碼是你的責任。

+0

這似乎是asp:Literal控件的目的,它允許顯式控制轉義。 – brianary 2013-09-18 23:34:17

0

asp.net aspx解析器將忽略「& lt;」和「& gt」;到「<」和「>」。它會產生這樣的方法:

[DebuggerNonUserCode] 
private Label __BuildControlLabel1() 
{ 
    Label __ctrl = new Label(); 
    base.Label1 = __ctrl; 
    __ctrl.ApplyStyleSheetSkin(this); 
    __ctrl.ID = "Label1"; 
    __ctrl.Text = "<abc>"; 
    return __ctrl; 
} 

如果你想把它寫在你可能會增加一倍逃脫像文本屬性「&放大器; LT;」,但它可能是更容易只是它的開始之間寫像你提到的結束標籤。

<asp:Label ...>&lt;abc&gt;</asp:Label>.