MVC 2.0将表单发布到操作而不是重定向到操作

时间:2010-08-17 06:57:33

标签: asp.net-mvc-2

我正在使用T4MVC重定向到另一个动作返回RedirectToAction(MVC.MyController.MyAction());. 结果它正在获取请求。

有没有办法从控制器发出请求。我想保持相同但只发帖而不是。我找不到任何方法。我在这里发现了一个帖子助手http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx但是我无法通过这个帖子助手传递我需要的任何值。我试图通过TempData传递值,但是当我使用这个助手时它们不会出现。可能有些人有任何想法吗?

我想这样做的原因是因为当用户从一个控制器到另一个控制器然后如果用户点击更新或只是在浏览器地址栏中单击输入,页面就会中断。

我应该因为这个原因使用会话吗?

2 个答案:

答案 0 :(得分:1)

RedirectToAction将始终执行GET,而不是POST(它会向浏览器返回HTTP 302,然后发出GET请求)。

要在重定向中保留数据,如果数据可以很容易地表示为字符串并存储在查询字符串中,那么您只需将其添加到重定向的路由值即可。 e.g。

return RedirectToAction("Search", new { searchString = "whatever" });

如果是复杂类型,则需要将其存储在TempData中。 StackOverflow上的许多其他问题(例如this)提供了有关如何的详细信息。

如果在您的应用程序中反复存储和读取TempData会冒犯您的代码感,那么您可以使用MvcContrib project中提供的PassParametersDuringRedirect属性和通用RedirectToAction来封装它。有关此技术的一些详细信息可用here

答案 1 :(得分:0)

唯一的做法是通过提交表单并在该表单上进行提交,无论是使用提交按钮还是使用javascript,您希望传递给该操作的任何信息都必须采用该格式,您将在{{ {1}}(希望我拼写正确)。