如何修复不允许子操作执行重定向操作,其他答案无法修复
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”操作中,一切都会正常工作。