ToolTip编码问题

时间:2012-07-23 14:32:17

标签: c# asp.net encoding .net-4.0

<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;

问题是超链接的文本是正确的,但工具提示显示编码的字符。 enter image description here

如何以与文字相同的方式显示工具提示?

3 个答案:

答案 0 :(得分:8)

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

  1. '字符编码为&#39;;
  2. &字符编码为&amp;
  3. 最后,输出将作为title="This is test&amp;quot;s."发送到浏览器。由于默认情况下属性值已经被编码,因此您可以安全地将Tooltip属性设置为原始文本,并仅编码Text属性的文本。

    注意:在这种情况下,默认情况下会执行属性编码,但4.0之前的.NET版本中的HtmlEncode不会对'字符进行编码。请参阅HtmlEncode and UrlEncode Now Encode Single Quotation Marks

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

答案 1 :(得分: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>

答案 2 :(得分:0)

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

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