我在asp.net中使用HTMLButton的网页表单有一个奇怪的问题。出于格式化原因,我需要使用<button>
构造,这很好,它适用于所有其他测试的浏览器,但IE11。
<button id="cmdLogin" runat="server" OnServerClick="cmdLogin_OnServerClick" class="btn btn-more" ValidationGroup="Login" CausesValidation="True">
Login
</button>
当我放置一个标准的asp.net按钮控件时,它可以正常运行客户端验证。我可以在按钮之间看到的差异是ASP.Net注入的onclick功能:
if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate('ModalLogin'); __doPostBack('ctl00$scriptsFooterPlaceholder$TDF971800010$cmdLogin','')
我知道IE11与__doPostBack
.Net 4存在一些问题,但我在.Net 4.51上,所以我不认为是这样。我可以看到没有任何JavaScript错误会阻止它(并且使用标准按钮测试我猜客户端脚本正在运行)以及我测试的其他每个浏览器(Chrome,FF,Safari,IE8,IE9,IE10)它正在运行,只是IE11。
有人见过这类问题吗?
答案 0 :(得分:0)
我以为我会尝试劫持IE11中的点击事件,看看我是否可以手动强制验证。事实证明,通过下面的代码处理过程更加容易,“修复”IE11问题:
<script>
var isIE11 = !!navigator.userAgent.match(/Trident.*rv\:11\./);
if (isIE11) {
$('.btn').on('click', function (e) {
e.preventDefault();
});
}
preventDefault
做到了,但奇怪的是它实际上允许客户端验证按预期工作,即它被捕获而不强制回发(在此之前客户端的东西被忽略,所有表单都是在回发时验证),所以这个“修复”并没有阻止客户端验证工作。
注意:我不喜欢或主张嗅探浏览器和版本,但在这种情况下因为只有IE11才有这种行为,我会在我得到它之后做更多的研究这个项目出了门。这似乎是IE11中使用.Net和使用HtmlButton构造的一个错误,它可能需要Microsoft的补丁。