【发布时间】:2024-09-08 06:15:02
【问题描述】:
通过一些努力,我部分实现了我想要的,但如果可以做得更好,我还在寻找其他选择。下面是场景:
当密码重置成功时,有一个控制器会显示一个视图,并且在该视图上我正在调用一个重定向到登录页面的脚本(它实际上会访问身份服务器并使用有效令牌返回登录页面)。
我发现很难在视图上显示成功消息,因为重定向发生得如此之快,以至于用户将无法显示消息(我尝试了其他可能的方式来显示消息设置 ViewBag、TemData 等,但没有任何效果并且这可能是我可以打赌的最好方法)。
尝试在脚本内的函数上设置 setTimeout,但它似乎工作部分(这就是我的想法,可能它不起作用,我看到的延迟可能是因为调用的 url 需要时间回应,不确定!)。
所以我需要一些关于如何实现延迟或超时的建议:
查看代码:
@if (ViewBag.Success != null)
{
<div>
<p class="alert-success">@ViewBag.Success</p>
</div>
}
@section scripts
{
@if (Model.AutomaticRedirectToSignIn)
{
// this is the script called
<script src="~/js/signout-redirect.js"></script>
}
}
脚本代码:
window.addEventListener("load", function ()
{
var a = document.querySelector("a.PostLogoutRedirectUri");
if (a) {
window.location = a.href;
}
});
我在下面尝试过:
方法一:
window.addEventListener("load", setTimeout(function () {
var a = document.querySelector("a.PostLogoutRedirectUri");
if (a) {
window.location = a.href;
}
}), 5000);
方法二:
setTimeout(window.addEventListener("load", function () {
var a = document.querySelector("a.PostLogoutRedirectUri");
if (a) {
window.location = a.href;
}
}), 5000);
方法 2,似乎给我带来了一些延迟(这是我可以观察到的,但不确定)。我无法完全更改脚本,因为我不确定它可能会影响其他地方。我只是想使用现有的重定向代码供我使用。
任何人都可以建议一个更好的方法来延迟到位,有没有办法在延迟后在我的视图上调用脚本?你的建议会有很大帮助。谢谢。
【问题讨论】:
-
我不得不改变我的方法。我无法解决这个问题。我只是离开了显示成功消息的视图页面,并要求用户单击该消息下方的链接返回登录页面..
标签: javascript html .net asp.net-mvc view