如何使用POST动词redirect到页面?
在控制器中调用RedirectToAction
,它将使用HTTP GET自动redirect。 我如何明确地告诉它使用HTTP POST?
我有一个行动,接受GET和POST请求,我想能够使用POST RedirectToAction
并发送一些值。
喜欢这个:
this.RedirectToAction( "actionname", new RouteValueDictionary(new { someValue = 2, anotherValue = "text" }) );
我希望使用HTTP POST而不是GET发送someValue
和anotherValue
值。 有谁知道如何做到这一点?
HTTP不支持使用POSTredirect到页面。 当你在某个地方redirect时,HTTP“位置”标题告诉浏览器去哪里,浏览器对该页面发出GET请求。 你可能只需要编写页面的代码来接受GET请求和POST请求。
举个例子,我只是这样做,因为你显然不关心实际上浏览器是否得到了redirect(通过接受你已经接受的答案):
[AcceptVerbs(HttpVerbs.Get)] public ActionResult Index() { // obviously these values might come from somewhere non-trivial return Index(2, "text"); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(int someValue, string anotherValue) { // would probably do something non-trivial here with the param values return View(); }
这很容易,没有什么有趣的事情发生 – 这可以让你保持第二个实际上只接受HTTP POST请求的事实(除非在这个例子中,无论如何你都可以控制这个请求),你不必使用TempData,这就是你在回答中发布的链接所build议的。
如果有什么问题,我很想知道这是什么“错误的”。 显然,如果你真的想要发送到浏览器的redirect,这是行不通的,但是你应该问为什么你会试图转换,因为这对我来说似乎很奇怪。
希望有所帮助。
如果要在redirect期间在两个操作之间传递数据而不在查询string中包含任何数据,请将该模型放入TempData对象中。
行动
TempData["datacontainer"] = modelData;
视图
var modelData= TempData["datacontainer"] as ModelDataType;
TempData是一个非常短暂的实例,你只能在当前和后续的请求中使用它! 由于TempData以这种方式工作,所以您需要确切知道下一个请求是什么,redirect到另一个视图是唯一可以保证这一点的时间。
因此,使用TempData可靠工作的唯一场景是在redirect时。
试试这个
return Content("<form action='actionname' id='frmTest' method='post'><input type='hidden' name='someValue' value='" + someValue + "' /><input type='hidden' name='anotherValue' value='" + anotherValue + "' /></form><script>document.getElementById('frmTest').submit();</script>");
贾森的答案将在大多数情况下工作,我所看到的唯一的问题是,它是事故倾向。 即调用操作方法直接绕过应用于操作的所有filter 。 因此,如果对操作方法应用了任何validation或计数器types的筛选器,则可能会丢失该数据。 直接调用一个动作方法将会起作用,但应该谨慎应用。
我想扩大Jason Bunting的答案
喜欢这个
ActionResult action = new SampelController().Index(2, "text"); return action;
而Eli会在这里想出一些关于如何使它变成一个通用variables的想法
可以得到所有types的控制器
- 网站停止在asp.net System.Web.WebPages.Razor.Configuration.HostSection工作不能转换为
- ASP.NET MVC Ajaxerror handling
- 如何在一个foreach中使用EditorFor
- JavaScript的string数组的AJAX Post作为List <String>的JsonResult总是返回空?
- 如何获取ASP.NET MVC操作中的引用URL?
- 当ASP.NET MVC中的file upload超过允许的大小时显示自定义错误页面
- ASP.NET MVC 5与WebMatrix SimpleMembershipProvider不兼容吗?
- C#entity framework:如何结合模型对象上的.Find和.Include?
- 在控制器.NET MVC中创build一个URL