哪个是打印纯文本的服务器端控件?

时间:2012-02-15 14:17:05

标签: .net security encoding escaping

我知道(感谢我以前的SO question服务器端控件自动编码其内容,而Response.Write(或简短版本<%=%>)写入原始输出

那么,.NET (3.5+)中的服务器端控件是编写/转义(“安全”)纯文本的吗?

2 个答案:

答案 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:textboxasp: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 %>

这更像你想要的吗?