我知道(感谢我以前的SO question)服务器端控件自动编码其内容,而Response.Write(或简短版本<%=%>)写入原始输出
那么,.NET (3.5+)
中的服务器端控件是编写/转义(“安全”)纯文本的吗?
答案 0 :(得分:1)
Label control将对您输入的内容进行编码。因此,如果您将其Text
属性设置为“hello my”昵称“is”,它将输出类似hello my "nickname" is <markzzz>
的HTML。
如果您不希望ASP.NET对Text
属性进行编码,请使用Literal control。这将输出文本,就像您输入的那样。这样,您可以将其Text
属性设置为<strong>something</strong>
。你会在HTML中得到完全相同的。您的用户会看到某些内容(因此,以粗体显示)。
所以,我认为你想要Label控件。
<强>更新强>
“使用Microsoft .NET Framework 4进行Web应用程序开发”(考试70-515的培训套件)这本书让我感到困惑。它说:
如果要将原始HTML添加到页面,请使用Literal控件, 无需ASP.NET提供任何其他处理。在 乍一看,Literal控件看起来与Label非常相似 控制。但是,Literal不会像Web一样从WebControl继承 确实。此外,Literal控件不会添加任何HTML元素 到网页,而标签被渲染为标签。这个 意味着Literal控件没有样式属性,而且你 因此不能将样式应用于其内容。
Literal控件是 当您需要动态地向页面输出添加文本时非常有用 (来自服务器)但不想使用Label。如果你的文字是 静态,你可以简单地将它添加到页面的标记(你没有 需要Label或Literal控件)。 Literal控件包含 Mode属性,用于指定任何特定的处理 Text属性的内容。可用的模式和他们的 说明如表4-2所示。
所以,我相信两者都可以使用。 Label只会将html添加到您输入的文本中(即span标记)。 Literal不会,但是,就像bukko说的那样,你应该正确设置Mode属性。
答案 1 :(得分:0)
我对这个问题感到有些困惑,但是如果你想知道哪些ASP控件会显示带有自动HTML编码的文本,我确信asp:textbox
和asp:textarea
都可以。< / p>
但是,只要先对其进行编码,您也可以使用Response.Write
实现此目的,例如
Response.Write( Server.HTMLEncode("The <select /> control!") );
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.htmlencode.aspx。
或者,使用.NET 4,您可以使用旧的经典ASP块来编码输出:
<% string output_text = "<select />"; %>
<%= output_text %>
这更像你想要的吗?