【问题标题】:MVC redirect to another page after a four second pause暂停四秒后,MVC 重定向到另一个页面
【发布时间】:2014-09-02 05:24:29
【问题描述】:

我对 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");

谢谢!

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • yes 和 ajax 发送数据并接收结果,如果成功与否
  • 你也可以用 jquery 显示一个计时器
【解决方案2】:

您可以考虑的另一种方法是老式元刷新

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

您可以通过模型上的属性或 ViewBag 中的值来控制哪些内容

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

由于这需要在标题中,您可能需要在 _layout 中放置标题“部分”

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

然后你可以在你的视图中使用它

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      注意使用 Url.Action() 帮助方法将生成的 URL 注入到 JavaScript 代码中。

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 2017-06-08
        • 1970-01-01
        • 2017-07-14
        • 2017-03-04
        相关资源
        最近更新 更多