输入"占位符"使用AntiXssEncoder时,属性不再在IE中工作

时间:2015-04-16 11:28:50

标签: asp.net internet-explorer antixsslibrary

当输入为空并取消选择时,我无法在输入元素上看到占位符值。输入元素:

<input id="OldPassword" runat="server" type="password" class="form-control" name="password_old" placeholder="Old password" tabindex="1" autocomplete="off" required />
<input id="NewPassword" runat="server" type="password" class="form-control" name="password" placeholder="New password" tabindex="2" autocomplete="off" required />
<input id="NewPasswordRepeat" runat="server" type="password" class="form-control" name="password_confirm" placeholder="Repeat new password" tabindex="3" autocomplete="off" required />

Placeholders not displayed on input elements

当我刚刚将项目从.NET4.0升级到.NET 4.5.1并且我已经将 encoderType 添加到 httpRuntime 时出现了这个问题:

<httpRuntime targetFramework="4.5.1" 
             requestValidationMode="4.5" 
             enableVersionHeader="false"
             encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

删除AntiXss encoderType 属性时,输入会再次显示其占位符:

Placeholders are displayed on input elements

使用Internet Explorer时,我只有这个问题,Chrome和FireFox似乎工作得很好。我使用的是 Internet Explorer v11.0.9600.17728 ,因此在使用 AntiXssEncoder 之前,支持占位符属性或者它们不起作用。

可能导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

该问题是由 X-UA兼容的元标记引起的,其早期IE版本渲染具有多个内容值:

<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />

此标记的内容由 AntiXssEncoder 编码为

<meta http-equiv="X-UA-Compatible" content="IE=9;&#32;IE=8;&#32;IE=7;&#32;IE=EDGE" />

Internet Explorer似乎无法使用元标记内容中的&amp;#32 HTML代码,并在 IE = 9 之后立即关闭值,导致在IE9的兼容模式下呈现的页面。在IE10中添加了对占位符属性的支持,因此自从为IE9呈现文档以来它们没有显示。

我通过删除元标记中的空格解决了这个问题:

<meta http-equiv="X-UA-Compatible" content="IE=9;IE=8;IE=7;IE=EDGE" />