簡體   English   中英

如何解決不允許子操作執行重定向操作,其他答案不解決

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM