Javascript 使用Asp.Net Core,如何将视图作为新的浏览器选项卡打开,然后在以后再次关闭

Javascript 使用Asp.Net Core,如何将视图作为新的浏览器选项卡打开,然后在以后再次关闭,javascript,c#,asp.net-core,Javascript,C#,Asp.net Core,虽然我希望避免弹出窗口(由于弹出窗口拦截器等原因),但当单击以在新浏览器选项卡中打开关联视图时,我确实需要某个链接。但是在该视图中(只是一个带有一些用户元素和提交按钮的表单),当它被提交时,我需要让它关闭新选项卡(基本上是将控件返回到原始选项卡) 我想我已经解决了这个问题,将target=“_blank”添加到相关标记中,并在控制器的末尾强制它重定向到CloseTab视图,该视图只不过是调用window.close()的javascript 不幸的是,当打开新选项卡工作时,当它在提交完成后尝试关

虽然我希望避免弹出窗口(由于弹出窗口拦截器等原因),但当单击以在新浏览器选项卡中打开关联视图时,我确实需要某个链接。但是在该视图中(只是一个带有一些用户元素和提交按钮的表单),当它被提交时,我需要让它关闭新选项卡(基本上是将控件返回到原始选项卡)

我想我已经解决了这个问题,将target=“_blank”添加到相关标记中,并在控制器的末尾强制它重定向到CloseTab视图,该视图只不过是调用window.close()的javascript

不幸的是,当打开新选项卡工作时,当它在提交完成后尝试关闭选项卡时,它会失败,“脚本可能只关闭它们打开的窗口”

如何关闭目标为空时打开的选项卡?或者我应该使用一些不同的方法(不是弹出窗口,所以window.open是out)在新选项卡中打开视图吗

我的代码如下:

在调用视图中(前面提到的标记):

打卡
PunchIn.cshtml:

@model TimePunchViewModel

<form asp-action="PunchIn">
    @{ 
        // TODO: user editable fields go here
    }

    <input type="submit" />
</form>
<form asp-action="PunchIn" method="post">
    @{ 
        // TODO: user editable fields go here
    }
    <input id="submit" type="submit" value="submit" />
</form>
@model TimePunchViewModel
@{ 
//TODO:用户可编辑字段转到此处
}
TimePunchController.cs:

public IActionResult PunchIn()
{
    var model = new TimePunchViewModel();

    return View(model);
}
[HttpPost]
public async Task<IActionResult> PunchIn(TimePunchViewModel model)
{
// TODO: save based on model

// close the tab
    return View("CloseTab");
}
public IActionResult PunchIn()
{
var模型=新的TimePunchViewModel();
返回视图(模型);
}
[HttpPost]
公共异步任务PunchIn(TimePunchViewModel模型)
{
//TODO:基于模型保存
//关闭选项卡
返回视图(“关闭选项卡”);
}
CloseTab.cshtml:

<body>
    <script type="text/javascript">
        window.close();
    </script>
</body>

window.close();

您可以使用ajax在成功回调函数中提交表单并关闭窗口

PunchIn.cshtml:

@model TimePunchViewModel

<form asp-action="PunchIn">
    @{ 
        // TODO: user editable fields go here
    }

    <input type="submit" />
</form>
<form asp-action="PunchIn" method="post">
    @{ 
        // TODO: user editable fields go here
    }
    <input id="submit" type="submit" value="submit" />
</form>
结果:


好的,我已经让它工作了,但现在我遇到了另一个问题-如果我在该页面/视图上,并且我提交了更改,并且我需要保持页面正常运行(例如显示验证错误或过滤数据),它仍然会关闭选项卡。如何更新此逻辑以避免这种情况?
[HttpPost]
public void PunchIn(TimePunchViewModel model)
{
    // TODO: save based on model

}