2

我想要做的是在 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-->

有任何想法吗?

4

2 回答 2

0

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

当您向用户返回响应时,您要么返回一个带有 HTTP 代码 200(OK)的页面来显示,要么返回一个带有 HTTP 代码 301(永久移动)或 307(临时移动)和 URL 的重定向指令重定向到。

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

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

于 2010-08-19T18:58:57.473 回答
0

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

于 2010-08-19T18:39:33.947 回答