ASP.NET MVC如何从Controller实现点击链接后在新标签页打开目标URL
问题原因
你现有代码的核心问题是:@Html.ActionLink默认是在当前标签页发起请求,请求NewWindow接口后返回的JS脚本会直接覆盖当前页面的内容,即使能触发弹窗也会导致原页面被替换,不符合使用预期。
最简修复方案
你不需要在后端拼接JS脚本,直接通过以下两步修改即可实现需求:
- 修改cshtml页面的
ActionLink方法,新增target="_blank"属性,让点击链接时先打开新标签页发起请求:
@*This is index.cshtml*@ @{ ViewBag.Title = "Index";} <h2>Click on the link below</h2> <!-- 最后一个参数指定a标签的target属性为_blank --> @Html.ActionLink("GOOGLE", "NewWindow", "Home", null, new { target = "_blank" })
- 修改Controller中的
NewWindow方法,直接返回重定向结果即可,后端还可以在重定向之前执行你需要的业务逻辑(比如权限校验、行为埋点等):
public class HomeController : Controller { // GET: Home public ActionResult Index() { return View(); } public ActionResult NewWindow() { // 此处可添加自定义业务逻辑 return Redirect("https://www.google.com/"); } }
其他说明
如果你的场景要求不能在a标签上提前写target="_blank",必须由原页面触发新标签打开,也可以给ActionLink绑定点击事件,阻止默认跳转行为,异步请求后端拿到目标地址后调用window.open打开新标签即可。
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

