4
<asp:HyperLink ID="TestHyperLink" runat="server"></asp:HyperLink>

我有上面的超链接。我只是用下面的代码设置文本:

string textFromUser = "This is test's.";
string encodedText=HttpUtility.HtmlEncode(textFromUser);
TestHyperLink.Text = encodedText;
TestHyperLink.ToolTip = encodedText;

问题是超链接文本正确,但工具提示显示编码字符。 在此处输入图像描述

如何使工具提示以与文本相同的方式出现?

4

3 回答 3

8

您会看到这个问题,因为属性值被编码了两次。

  1. 字符被'编码为&#39;;
  2. 字符被&编码为&amp;.

最后将输出作为title="This is test&amp;quot;s.". 由于默认情况下已经对属性值进行了编码,因此您可以安全地将Tooltip属性设置为原始文本并仅对Text属性的文本进行编码。

注意:在这种情况下,默认执行属性编码,但HtmlEncode在 .NET 4.0 之前的版本中没有对'字符进行编码。请参阅HtmlEncode 和 UrlEncode 现在对单引号进行编码

更新:我做了一些谷歌搜索,发现了这个有趣的参考(which ASP.NET Controls Automatically Encodes?),它可能已经过时了,但至少对于这种特定情况,记录的行为是你得到的。

于 2012-07-23T14:52:48.853 回答
1

如前所述,ASP.NET 控件的 ToolTip 属性将在输出/呈现时自动编码值。

这意味着将工具提示设置为纯文本是安全的,因为页面将在呈现时清理文本。

Label1.ToolTip = "Some encoded text < Tag >"

将 HTML 输出呈现为:

<span title="Some encoded text &lt; Tag >"></span>

如果您需要使用已经编码的文本,您可以设置 title 属性:

Label1.Attributes("title") = "Some encoded text &lt; Tag &gt;"

将 HTML 输出呈现为:

<span title="Some encoded text &lt; Tag &gt;"></span>
于 2013-07-30T14:36:04.080 回答
0

看起来工具提示不需要像文本那样编码。

尝试直接使用textFromUser而不是设置工具提示encodedText

于 2012-07-23T14:37:35.453 回答