ASP.NET Core 6 MVC:window.print()后页面异常刷新丢失控制器数据问题
解决打印后页面自动刷新的问题
以下是针对你遇到的打印完成/取消后页面自动刷新、丢失ViewBag/TempData的解决建议:
修正按钮的默认行为
按钮默认类型是submit,如果它处在<form>标签内,点击时会触发表单提交,导致页面刷新。修改按钮代码,添加type="button"并阻止默认事件:<button type="button" class="button current" id="printButton" onClick="window.print(); return false;"> Print </button>排查打印相关的全局事件监听
检查页面中是否存在window.onbeforeprint或window.onafterprint的监听代码,这类事件如果被错误地绑定了页面刷新逻辑(比如location.reload()),会导致打印后自动刷新。确保这些事件回调里没有触发刷新的代码:// 错误示例,需要移除或修改 // window.onafterprint = function() { location.reload(); }改用事件监听器替代内联onClick
内联事件可能和页面其他脚本产生冲突,改用addEventListener绑定点击事件,更稳定地阻止默认行为:document.getElementById('printButton').addEventListener('click', function(e) { e.preventDefault(); // 阻止按钮的默认提交行为 window.print(); });同时记得给按钮加上
type="button"属性。检查表单上下文
如果按钮位于<form>标签内部,即使没指定action,浏览器也会默认提交当前页面。可以选择:- 将按钮移出
<form>标签范围 - 给表单设置明确的
action(如果确实需要提交) - 在表单的
onsubmit事件中返回false阻止默认提交
- 将按钮移出
内容的提问来源于stack exchange,提问作者RJPWilliams
相关产品推荐
相关产品推荐

