[英]How to fix Child actions are not allowed to perform redirect actions, other answers does not fix
ASP.NET MVC2視圖:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.PaymentViewModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
...
<form action="<%= Html.Action("PaymentByBankTransfer", "Checkout") %>" >
<input type="submit" value="Payment by bank transfer" />
</form>
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);
}
按表單提交按鈕導致異常
Child actions are not allowed to perform redirect actions
如代碼所示,來自
如何獲得ASP.NET MVC Ajax響應以重定向到新頁面,而不是將視圖插入UpdateTargetId?
試圖修復它,但這會導致其他錯誤:瀏覽器嘗試打開URL window.location = '/Checkout/CompleteOK'
如何解決此異常? 一切看起來都不錯,沒有其他答案中所述的局部視圖。 我嘗試也可以在表單中使用method ='post'屬性,但問題仍然存在。
無需使用javascript進行重定向:如果將表單放在子視圖內,有時,如果在Beginform helper(在子視圖內)中指定動作名稱和控制器名稱,則不會發生此問題。 例如,我像這樣更改了子操作視圖:
之前:
@using (Html.BeginForm())
{
...
}
之后:
@using (Html.BeginForm("InsertComment", "Comments", FormMethod.Post, new { id = "commentform" }))
{
...
}
現在,您可以將RedirectAction命令放入“ InsertComment”操作中,然后一切正常。
與其在發布時調用public ActionResult CheckoutCompleteOK()
, public ActionResult PaymentByBankTransfer()
刪除該操作並為public ActionResult PaymentByBankTransfer()
創建一個HTTP Post Action。
然后返回RedirectToAction("Complete");
在PaymentByBankTransfer發布方法中。
我認為這可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.