MVC 5中如何在新窗口打开视图而非新标签页?
解决表单提交后打开新窗口而非新标签页的问题
首先得明确:你的代码本身没有语法错误,问题出在现代浏览器的默认行为上——target="_blank"在Chrome、Edge(Chromium内核)和IE11+里,默认都会打开新标签页而非独立浏览器窗口,这是浏览器为优化用户体验设置的默认偏好,单纯靠HTML的target属性没法强制改变这个行为。
要实现提交表单后打开独立新窗口,你需要借助JavaScript的window.open()方法主动控制窗口打开方式,具体修改方案如下:
修改后的Razor代码
@using (Html.BeginForm("FilePost", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "fileUploadForm" })) { <input type="file" name="inputFile" /> <input type="submit" value="Submit" onclick="handleFormSubmit(); return false;" /> } <script> function handleFormSubmit() { // 打开自定义尺寸的独立窗口,可按需调整宽高、工具栏等参数 const newWindow = window.open('', '_blank', 'width=800,height=600,menubar=no,toolbar=no,scrollbars=yes'); // 将表单target指向新窗口,确保提交结果在新窗口展示 document.getElementById('fileUploadForm').target = '_blank'; // 提交表单 document.getElementById('fileUploadForm').submit(); } </script>
关键说明
- 阻止默认提交:
onclick里的return false会接管按钮的默认提交行为,让JS控制整个流程。 - 窗口参数控制:
window.open()的第三个参数定义了窗口的尺寸、是否显示菜单栏等,这些参数会明确告诉浏览器要打开独立窗口而非标签页。 - 弹出窗口权限:部分浏览器会拦截非用户主动触发的弹出窗口,这里的触发来自用户点击提交按钮,属于合法操作,一般不会被拦截;如果遇到拦截,提醒用户允许当前站点的弹出窗口即可。
如果不需要自定义窗口尺寸,也可以简化参数为window.open('', '_blank'),但加上尺寸参数更能确保浏览器打开独立窗口。
内容的提问来源于stack exchange,提问作者JohnTheWizard
相关产品推荐
相关产品推荐

