当我RedirectToAction("MyView", "MyController")
有时使用重定向时,渲染目标视图的速度非常慢。
它并不总是发生。
我正在使用 ASP.net MVC4 和 IIS7.5
如何防止此问题并加快重定向?
当我RedirectToAction("MyView", "MyController")
有时使用重定向时,渲染目标视图的速度非常慢。
它并不总是发生。
我正在使用 ASP.net MVC4 和 IIS7.5
如何防止此问题并加快重定向?
我会把它放在这里,因为代码在评论部分不会很好地显示。如果您要重定向到的操作方法位于您当前所在的同一控制器中,则直接调用该方法并返回其结果而不是由 RedirectToAction 方法生成的重定向响应更简单、更有效。只是为了确保我们在同一页面上,RedirectToAction 实际上会向客户端返回重定向响应 (302),要求它向您根据 MSDN http://msdn.microsoft.com/指定的操作方法发出新请求en-us/library/system.web.mvc.controller.redirecttoaction(v=vs.108).aspx。一些代码来说明:
public ActionResult MyAction(){
//do some work here
Return View(MyModel);
}
public ActionResult ActionIAmCurrentlyIn(){
//Do Soe work here
return RedirectToAction ("MyAction", "MyController"); //This costs an extra trip across the wire
return MyAction(); // Does same thing but without the extra trip to the client
}
如果将参数传递给“MyAction”并且随着网络速度的下降,额外行程的这种开销会变得更加重要。
为了防止这个问题并加快重定向使用:
return Redirect("~/MyController/MyView");
这种方法不会改变客户端-服务器交互。
回复为答案,因为我没有足够的代表来添加评论...
@JTMon 在你的代码中“return MyAction();” 可能会导致潜在的问题,因为“MyAction”操作实际上会尝试加载一个名为“ActionIAmCurrentlyIn”的视图,因为这是在路由值中指定的操作(至少我假设它是从那里获取它的,我实际上并没有挖掘进入代码找出)。
这可以通过在 MyAction 中指定视图名称来解决:
return view("MyAction", MyModel);
你可以使用RedirectToActionPermanent("View","Controller");
它。