我在使用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,所以我不认为是这个问题。在我测试过的所有其他浏览器(Chrome,FF,Safari,IE8,IE9,IE10)中,我看不到会阻止它的JavaScript错误(通过标准的按钮测试,我猜客户端脚本是可以工作的),只有IE11可以工作。
有没有人见过这种问题?
发布于 2015-04-01 15:30:23
我想我应该尝试在IE11中劫持单击事件,看看是否可以手动强制执行验证。事实证明,通过下面的代码可以更容易地“修复”IE11问题:
<script>
var isIE11 = !!navigator.userAgent.match(/Trident.*rv\:11\./);
if (isIE11) {
$('.btn').on('click', function (e) {
e.preventDefault();
});
}
preventDefault做到了,但奇怪的是,它实际上允许客户端验证按预期工作,也就是说,它在不强制回发的情况下被捕获(在此之前,客户端的东西被忽略,所有表单都在回发时验证),所以这个“修复”不会阻止客户端验证的工作。
注意:我不喜欢也不提倡嗅探浏览器和版本,但在这种情况下,因为只有IE11有这种行为,我将在这个项目发布后对其进行更多的研究。这看起来像是使用.Net和使用HtmlButton构造的IE11中的一个错误,这可能需要微软的补丁。
https://stackoverflow.com/questions/29378725
复制相似问题