从一个控制器动作发布到另一个控制器动作(不重定向)

Posted

技术标签:

【中文标题】从一个控制器动作发布到另一个控制器动作(不重定向)【英文标题】:Post from one controller action to another (not redirect) 【发布时间】:2010-09-30 00:13:12 【问题描述】:

我有一个动作,如果它满足某些条件,我需要转发到另一个动作,但是在传递到下一个动作时我无法保留表单数据。

接收动作接受一个FormCollection,发送动作则

目前,我正在执行 return RedirectToAction("action","controller", form)。而且我可以确定表单变量在重定向之前有键(form.HasKeys() = true)。

但是,当操作被触发时,FormCollection 为空(form.HasKeys() = false)。

有什么想法吗?是否有我缺少的“PostToAction”方法?

仅供参考:我正在使用 ASP.NET MVC Beta。非常感谢!

编辑:对于有此问题的人,请查看PRG Pattern。这是我想要做的实际术语,它也启用了漂亮的 url。

【问题讨论】:

【参考方案1】:

当调用 RedirectToAction 时,它会进行 HTTP 重定向,并会向其他操作 URL 进行 GET。如果您需要重用来自另一个控制器的代码,我会按照 ewalshe 的建议进行操作,将 common 移至 BaseController 或业务服务,并将这两个操作委托给它。

此链接可能会有所帮助:

ASP.NET MVC Tip #6 – Call RedirectToAction after Submitting a Form How to RedirectToAction in ASP.NET MVC (Preview 4) without losing request data

【讨论】:

爱德华多,感谢您的联系!看看 Stephen Walther 的例子会有所帮助。【参考方案2】:

我会重构这两个控制器并将公共代码放入帮助程序或公共基类中。这样,两个控制器中的操作就可以委托给公共代码。

【讨论】:

以上是关于从一个控制器动作发布到另一个控制器动作(不重定向)的主要内容,如果未能解决你的问题,请参考以下文章

Play framework 1.x 重定向删除动作

在 RAILS 中将模型从一个控制器动作传递到另一个控制器动作的替代方法

如何重定向到同一控制器中的另一个动作?

从一个区域的动作重定向到“根”区域中的动作?

在 Play 框架中重定向到同一控制器中的动作

在不同的控制器动作方法之间传递数据