ASP.NET MVC提交按钮在Chrome中无法触发控制器,如何解决?
解决Chrome中ASP.NET MVC提交按钮无法触发控制器的问题
嘿,我之前也踩过这个坑!Chrome和IE对表单提交时按钮状态的处理逻辑差异很大——你当前的代码里,点击按钮后立刻把它禁用了,Chrome会因为按钮被禁用而直接中断后续的表单提交流程,但IE会先执行表单提交请求,再处理按钮禁用的操作,所以才会出现IE正常、Chrome失效的情况。
给你两个靠谱的解决办法:
方法一:延迟禁用按钮,给表单提交留足时间
把禁用按钮的操作延迟一小段时间,确保表单提交请求已经发起后再禁用按钮,修改后的代码如下:
<input type="submit" value="Create" id="btnSaveSubmit" name="btnSubmit" class="button" onclick="if (!($('#frID').valid())) { return false; } var btn = this; setTimeout(function(){ btn.disabled = true; btn.value = 'Saving...'; }, 100);" />
这里用setTimeout把禁用操作延迟100毫秒,足够Chrome完成表单提交的触发流程,同时也能达到防止重复点击的目的。
方法二:绑定表单的submit事件(更推荐)
把验证和按钮禁用的逻辑绑定到表单的submit事件上,这种方式能避免浏览器之间的差异,代码也更清晰:
首先,移除按钮上的onclick属性:
<input type="submit" value="Create" id="btnSaveSubmit" name="btnSubmit" class="button" />
然后添加一段jQuery代码(确保页面已经引入jQuery):
$(function(){ // 绑定表单的submit事件 $('#frID').submit(function(){ // 先验证表单 if (!$(this).valid()) { return false; } // 验证通过后禁用按钮并修改文本 var submitBtn = $('#btnSaveSubmit'); submitBtn.prop('disabled', true); submitBtn.val('Saving...'); }); });
这种方式下,表单提交的逻辑由表单本身的事件触发,浏览器的处理会更一致,不会出现按钮禁用打断提交的问题。
内容的提问来源于stack exchange,提问作者Marielle
相关产品推荐
相关产品推荐

