HtmlButton没有在IE11中运行客户端验证

时间:2015-03-31 21:14:59

标签: javascript .net internet-explorer-11 asp.net-4.5

我在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。

有人见过这类问题吗?

1 个答案:

答案 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的补丁。