如何修复不允许子操作执行重定向操作,其他答案无法修复

ASP.NET MVC2视图:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>  ... <form action="" >   

CheckoutController:

  public ActionResult PaymentByBankTransfer() { var order = Session["Order"] as Order; ExecCommand(@"update dok set confirmed=true where order={0}", order.OrderId); return CheckoutCompleteOK(); var cart = ShoppingCart.GetCart(HttpContext); cart.EmptyCart(); // https://stackoverflow.com/questions/1538523/how-to-get-an-asp-net-mvc-ajax-response-to-redirect-to-new-page-instead-of-inser?lq=1 return JavaScript("window.location = '/Checkout/CompleteOK'"); } // common method called from other controller methods also public ActionResult CheckoutCompleteOK() { var cart = ShoppingCart.GetCart(HttpContext); cart.EmptyCart(); // prevent duplicate submit if user presses F5 return RedirectToAction("Complete"); } public ActionResult Complete() { var order = Session["Order"] as Order; SendConfirmation(order); return View("PaymentComplete", order); } 

按表单提交按钮会导致exception

 Child actions are not allowed to perform redirect actions 

代码显示最受欢迎的答案

如何获取ASP.NET MVC Ajax响应以重定向到新页面而不是将视图插入UpdateTargetId?

尝试修复它,但这会导致其他错误:浏览器尝试打开url window.location = '/Checkout/CompleteOK'

如何解决这个exception? 一切看起来都不错,没有其他答案中描述的部分视图。 我尝试als o在表单中使用method =’post’属性但问题仍然存在。

而不是在post上调用public ActionResult CheckoutCompleteOK() ,删除该操作并为public ActionResult PaymentByBankTransfer()创建HTTP Post Action。

然后返回RedirectToAction("Complete"); 在PaymentByBankTransfer post方法中。

我认为这可以解决你的问题。

不使用javascript进行重定向:如果将表单放在子视图中,有时如果在Beginform帮助器(子视图内)中指定操作名称和控制器名称,则不会发生此问题。 例如,我改变了我的子动作视图,如下所示:

之前:

 @using (Html.BeginForm()) { ... } 

之后:

  @using (Html.BeginForm("InsertComment", "Comments", FormMethod.Post, new { id = "commentform" })) { ... } 

现在,您可以将RedirectAction命令放在“InsertComment”操作中,一切都会正常工作。