以下asp标签无法在浏览器中显示,有人可以请
告诉我我做错了什么。我期望看到值<abc>
,而是
我一无所获。
<asp:Label ID="Label1" runat="server" Text="<abc>"></asp:Label>
顺便说一句,我意识到我可以完成同样的事情:
<asp:label id="Message1" runat="server"> <abc> </asp:Label>
但这并不是我要求的,我想知道的是,如果在asp元素的属性值中使用 "<abc>"
这样的字符串是允许的,或者不。换句话说,这是一个ASP.Net错误还是设计中的这种行为,如果它是设计的,那么这种设计的原因是什么?
非常感谢你。
答案 0 :(得分:4)
信不信由你,但是你可以在不逃避实体的情况下包含实体,因此:
<asp:Label runat="server" ID="myLabel" Text="<abc>" />
这将呈现&lt; abc&gt;标签
编辑:好的,对不起,您想显示括号,当然不是制作代码。 在Text属性中使用实体引用将得到相同的结果 - 一个(不可见)&lt; abc&gt;标记 - 因为它们在服务器端解析标记时被翻译。你必须做的是:
<asp:Label runat="server" ID="myLabel" Text="&lt;abc&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 ...><abc></asp:Label>.