当输入为空并取消选择时,我无法在输入元素上看到占位符值。输入元素:
<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 />
当我刚刚将项目从.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 属性时,输入会再次显示其占位符:
使用Internet Explorer时,我只有这个问题,Chrome和FireFox似乎工作得很好。我使用的是 Internet Explorer v11.0.9600.17728 ,因此在使用 AntiXssEncoder 之前,支持占位符属性或者它们不起作用。
可能导致此问题的原因是什么?
答案 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; IE=8; IE=7; 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" />