2010-08-19 75 views
2

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

我正沿

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

     CallProcess(...) 

     return View(); 
    } 

行思则有一个完成的动作进行重定向

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

或只是有一些看法里面呈现的是从内部进行重定向查看

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

任何想法?

回答

0

如果不在客户端上调用某种Javascript,则无法实现此目的。

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

您必须选择这些返回值中的任何一个,并且不能同时返回这两个值。

最简单的解决方案是使用Javascript将用户从“请稍等”页面重定向到目标,一旦它确定后台进程已完成。

+0

是的,我认为你是对的。我希望有一些MVC魔术。我只是做一个window.location,我可以在浏览器'GET'上设置我的303〜谢谢 – beatn1ck 2010-08-19 19:21:55

0

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

+0

我仍然会使用js重定向... – beatn1ck 2010-08-19 18:42:47