为什么在Asp.net MVC 2的子操作中不允许重定向结果

我有一些使用Asp.Net Futures RenderAction方法呈现的部分动作。其中一些在处理表单中的表单后执行重定向。


现在,我已升级到Asp.Net MVC 2 RC,它给我一个错误“不允许子操作执行重定向操作”。


我签出了源代码,并发现了引发异常的行。为了解决这个问题,我可以创建一个自定义的RedirectResult,但是在我开始之前,我想了解为什么框架首先不允许它。一定有很好的理由,也许我也不应该这样做。


有人知道这种限制的原因吗?


谢谢


繁星淼淼
浏览 854回答 3
3回答

跃然一笑

存在限制是因为MVC已经开始向客户端呈现视图。从这一点重定向的效果是不确定的。它可以完美地工作,可以继续呈现原始视图而无需重定向,它可以引发其他异常等。由于执行此操作的结果是不确定的,因此框架会阻止它。实际上,出于类似的原因,不应使用RenderAction呈现视图(或类似视图的内容)以外的任何内容。在您的特定情况下,外部操作应重定向。如果您最终还是要从视图内进行重定向而又不向用户显示任何内容,那么实际上没有任何目的首先浏览视图,因为外部操作可以适当地将工作委托给它拥有。

子衿沉夜

尝试在“儿童操作”中使用类似以下内容:ControllerContext.HttpContext.Response.Redirect(ControllerContext.HttpContext.Request.Url.ToString());
打开App,查看更多内容
随时随地看视频慕课网APP