MVC C#:点击提交按钮未处理请求却跳转至登录页问题咨询
问题分析与解决方案
根据你描述的情况——点击按钮后JS代码正常执行,但页面仍自动跳转至登录页,核心原因大概率是PDF下载请求未通过身份验证,后端返回401状态并触发登录页重定向,也可能存在JS语法错误或未处理的默认行为,以下是具体解决步骤:
1. 修复JS代码语法错误
你的JS代码缺少闭合的});,这会导致代码执行异常,可能引发意外行为:
$('#DownloadPDF').click(function (e) { alert("clicking download"); // PDF下载逻辑 }); // 补上这个闭合括号
2. 阻止可能的表单默认行为(若按钮在表单内)
即使按钮是type="button",如果嵌套在<form>标签中,某些场景下仍可能触发表单提交。可以在事件回调中明确阻止默认行为:
$('#DownloadPDF').click(function (e) { e.preventDefault(); // 阻止默认行为 alert("clicking download"); // PDF下载逻辑 });
3. 确保PDF下载请求携带身份验证信息
如果系统基于Cookie验证,要保证请求为同域且自动携带Cookie;如果是Token验证,需在请求头中附加授权Token:
- 示例(jQuery Ajax请求携带Token处理PDF下载):
$('#DownloadPDF').click(function (e) { e.preventDefault(); alert("clicking download"); $.ajax({ url: '/your-pdf-download-url', method: 'GET', headers: { 'Authorization': 'Bearer ' + localStorage.getItem('authToken') // 根据实际验证方式调整 }, xhrFields: { responseType: 'blob' // 处理二进制PDF文件 }, success: function(blob) { // 执行PDF下载操作 const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'document.pdf'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); }, error: function(xhr) { console.log('请求状态:', xhr.status); // 排查是否返回401未授权状态 } }); });
如果请求返回401状态码,说明身份验证失效,需要检查:
- 用户会话是否已过期
- 请求是否正确携带了验证凭证(Cookie/Token)
4. 检查后端重定向逻辑
确认后端处理PDF下载请求时,仅在用户会话完全失效的情况下才触发登录页重定向,避免对有效会话的请求误触发跳转。
内容的提问来源于stack exchange,提问作者Arturo Tiangco
相关产品推荐
相关产品推荐

