2010-04-04 53 views
2

继各种点但可能最详细here by Stephen Walter中描述的Post-Redirect-Get模式后,我想使用RedirectToAction,但它不接受参数发送一个对象给它。我只能将路线值作为对象或作为RouteValueDictionary发送。因此,目前我发送对象ID和类型,并在我重定向到的操作(如Results)中再次将该对象从数据存储中拉出。ASP.NET MVC中的PRG,但对象数据传输到重定向的动作

// redirect to confirm view 
return RedirectToAction("ChangeSuccess", "Redirect", 
    new { slug = tabgroup.Slug, contentType = tabgroup.ContentType }); 

但我想有发送对象,因为我已经在我的更新控制器动作,所以我不需要再拉出来。

这是可能的吗?

回答

1

here

但我会建议只传递ID。如果您以后决定使用延迟加载,保持实体在会话中将失败(因为会话在重定向后不见了)。我亲身体验过这一点,不得不重写许多行动。

+1

经过一段时间的思考之后,我决定像迄今为止那样传递参数。唯一的区别是,现在我使用MVCContrib的强类型RedirectToAction,这使得事情更容易出错并且清晰易懂。 – mare 2010-04-05 14:29:44

2

你有read this

... One of the issue with this pattern is when a validation fails or any exception occurs you have to copy the ModelState into TempData. If you are doing it manually, please stop it, you can do this automatically with Action Filters...

其数量13. PRG模式的数据修改

0

您无法将对象传递给GET URL。

由于RedirectToAction方法发出新的GET请求到服务器。

但是,您可以将query string参数传递给GET URL。所以请按照女王的建议尝试传递id。

要坚持你的对象之间的后续请求我强烈建议你使用TempData。然而它在内部使用会话,但在请求后立即终止会话。