【问题标题】:Rendering a View in MVC then immediately redirecting在 MVC 中渲染视图然后立即重定向
【发布时间】:2010-08-19 18:33:10
【问题描述】:

我想要做的是在 MVC 站点中呈现一个视图,通知用户在服务器端处理进行时不要刷新他们的浏览器。这可能是一个长时间运行的任务,如果他们点击刷新,它将再次发送请求,从而在进程实际成功时将它们发送到错误屏幕。我打算在 JS 中使用 JQuery $.ajax(...) 或简单的 $(document).ready(function() { window.location = ... });但我希望有一种方法可以在 MVC 中执行此操作,从而使我能够更好地控制返回给客户端调用的 HttpResponseCode。有没有办法做到这一点?

我的想法是这样的

    public ActionResult LoadingAsync(string UserKey, string userInf)
    {
        AsyncManager.OutstandingOperations.Increment();

        CallProcess(...)

        return View();
    }

然后让 Completed Action 执行重定向

   public ActionResult LoadingCompleted()
    {
        LongRunningProcess();
        return Redirect("http://yourdone.com");
    }

或者只是在视图内部渲染一些东西,从视图内部执行重定向

    <% Html.RenderAction("Process"); %><!--This won't actually redirect-->

有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc redirect asp.net-mvc-views


    【解决方案1】:

    如果不在客户端调用某种 Javascript,就无法实现这一点。

    当您向用户返回响应时,您可以使用 200(OK)的 HTTP 代码返回要显示的页面,或者使用 301(永久移动)或 307(临时移动)的 HTTP 代码进行重定向的指令以及要重定向到的 URL。

    你必须选择其中一个返回值,不能同时返回。

    最简单的解决方案是在确定后台进程完成后,使用 Javascript 将用户从“请稍候”页面重定向到目的地。

    【讨论】:

    • 是的,我认为你是对的。我希望有一些 MVC 魔法。我将只做一个 window.location 我可以在浏览器 'GET' 上设置我的 303 ~谢谢
    【解决方案2】:

    一个简单的解决方案是启动后台进程,然后显示一个页面,该页面 (1) 要求用户不要刷新,(2) 通过 Javascript 每隔几秒钟轮询一次服务器以确定后台进程是否完成, 和 (3) 在确定完成后重定向。

    【讨论】:

      猜你喜欢
      • 2015-06-16
      • 2011-06-09
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多