标签文本属性和实体

时间:2009-02-25 14:58:11

标签: asp.net

以下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> 

但这并不是我要求的,我想知道的是,如果在asp元素的属性值中使用 "&lt;abc&gt;" 这样的字符串是允许的,或者不。换句话说,这是一个ASP.Net错误还是设计中的这种行为,如果它是设计的,那么这种设计的原因是什么?

非常感谢你。

3 个答案:

答案 0 :(得分:4)

信不信由你,但是你可以在不逃避实体的情况下包含实体,因此:

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

这将呈现&lt; abc&gt;标签

编辑:好的,对不起,您想显示括号,当然不是制作代码。 在Text属性中使用实体引用将得到相同的结果 - 一个(不可见)&lt; abc&gt;标记 - 因为它们在服务器端解析标记时被翻译。你必须做的是:

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

这将产生所需的结果 - &amp; amp; 实体引用将向客户端呈现&符号。接下来是 <; ,结果是正确的客户端实体引用(&amp; lt; )。这将呈现为&lt;

明确地回答你的问题:是的,在ASP.NET属性中使用实体引用(显然)是正确的,因为它是XML格式。这对微软来说并不是一个“决定”(当然不是一个错误) - 我只是简单的XML。

诀窍是实现解析实体引用时(在服务器上解析标记时),以及生成的文本是什么,这将发送给客户端。

答案 1 :(得分:0)

是的,当然是允许的。标签控件的目的是向客户端显示文本和标记。我认为这非常有用。注入代码是您的责任。

答案 2 :(得分:0)

asp.net aspx解析器将取消“&amp; lt;”和“&amp; gt;”到“&lt;”和“&gt;”。它将生成类似这种方法的东西:

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

如果你想在text属性中编写它,你可以像“&amp; amp; lt;”那样双重转义,但是如你所提到的那样在开始和结束标签之间写它可能更容易。

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