2009-02-25 89 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>.