ASP.NET MVC如何实现重定向并在新窗口打开?
解决方案
服务器端的Context.Response.Redirect是基于HTTP协议的重定向指令,只能控制浏览器在当前窗口跳转,无法直接触发新窗口打开(这属于浏览器端行为,需前端代码实现)。你可以通过以下两种方式修改代码:
方案一:使用JavaScript直接打开新窗口
直接输出JavaScript代码,触发浏览器打开新窗口,同时可选择是否保留原页面:
@{ Layout = "Master.cshtml"; var links = Model.Value<IEnumerable<Link>>("linkTarget"); if (links != null && links.Any()) { var prettyLink = links.FirstOrDefault(); <script> // 打开新窗口,_blank表示新标签页/窗口 window.open('@prettyLink.Url', '_blank'); // 若需要当前页面也跳转到目标地址,取消下面注释;不需要则删除该行 // window.location.href = '@prettyLink.Url'; </script> } }
方案二:自动触发隐藏链接的点击
输出一个隐藏的<a>标签,通过JavaScript自动点击它,利用target="_blank"属性打开新窗口:
@{ Layout = "Master.cshtml"; var links = Model.Value<IEnumerable<Link>>("linkTarget"); if (links != null && links.Any()) { var prettyLink = links.FirstOrDefault(); <a id="autoRedirectLink" href="@prettyLink.Url" target="_blank" style="display: none;"></a> <script> document.getElementById('autoRedirectLink').click(); </script> } }
注意事项
- 部分浏览器会拦截
window.open的自动触发行为(视为弹窗),如果遇到拦截问题,方案二的兼容性相对更好。 - 若需要用户主动触发(比如点击按钮后打开新窗口),可以添加可见的按钮并绑定点击事件,避免被浏览器拦截。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

