暂停四秒钟后,MVC重定向到另一个页面

时间:2014-07-11 14:33:23

标签: javascript asp.net asp.net-mvc asp.net-mvc-4 razor

我对MVC比较陌生,但我有一个问题:

目前,当用户第一次登录我们的网站时,他们会被重定向到更改密码页面;他们必须先更改密码才能访问网站的任何主要功能。在成功更改密码后,我想在更改密码页面上显示我自定义的“密码成功更改”消息;我现在这样做。在我的更改密码页面上显示自定义消息后,我想等待几秒钟,然后将它们重定向到主页。

我希望能够做到这样的事情:

//User successfully changes password on ChangePassword page

return View(); //This keeps them on the ChangePassword page and shows the success message

//Wait five seconds on ChangePassword page

//Redirecttoaction("Index", "Home");

谢谢!

4 个答案:

答案 0 :(得分:13)

您无法在服务器端执行此操作,您必须使用javascript。你可以使用

window.setTimeout(function(){
window.location.href='your URL';
}, 4000);

答案 1 :(得分:5)

您可以考虑的另一种方法是旧学校元刷新

<meta http-equiv="refresh" content="4; url=http://example.com/">

您可以使用模型上的属性或ViewBag中的值来控制

@if(Model.DoRedirect) {
    <meta http-equiv="refresh" content="4; url=http://example.com/">
}

由于这需要在标题中,您可能需要设置标题&#34;部分&#34;在你的_layout

<head>
    ...
    @RenderSection("header", required: false)
</head>

然后您可以在视图中使用

@section header
    @if(Model.DoRedirect) {
        <meta http-equiv="refresh" content="4; url=http://example.com/">
    }
}

答案 2 :(得分:2)

您必须在客户端上执行此操作,因为您的服务器处理在返回View()时结束;对于请求。您在客户端上有几个选项,例如,使用javacript计时器,并在这么多毫秒之后调用您的下一个操作。

function onTimerElapsed(){
    window.location='@Url.Action("SomeAction","SomeController")';
}

答案 3 :(得分:1)

“等待4秒”部分发生在客户端,因此生成的重定向也应该是客户端。您可以在4秒后使用以下内容重定向JavaScript:

setTimeout(function () {
    window.location.replace('@Url.Action("Index", "Home"')
}, 4000);

请注意使用Url.Action()辅助方法将结果URL注入JavaScript代码。