1

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>

チェックアウトコントローラー:

    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

コードが最も支持された回答を示しているように

UpdateTargetId にビューを挿入する代わりに、ASP.NET MVC Ajax 応答を取得して新しいページにリダイレクトする方法は?

修正しようとしましたが、これにより他のエラーが発生します: ブラウザが URL を開こうとしていますwindow.location = '/Checkout/CompleteOK'

この例外を修正するにはどうすればよいですか? 他の回答で説明されているように、部分的なビューはありません。フォームで method='post' 属性を使用することも試みましたが、問題は解決しません。

4

2 に答える 2

4

リダイレクトにjavascriptを使わない 場合:子ビュー内にフォームを配置する場合、Beginformヘルパー(子ビュー内)でアクション名とコントローラー名を指定すると、この問題が発生しない場合があります。たとえば、子のアクション ビューを次のように変更しました。

前 :

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

後 :

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

これで、「InsertComment」アクション内に RedirectAction コマンドを配置でき、すべてが機能します。

于 2014-12-23T10:58:09.097 に答える
3

Calling public ActionResult CheckoutCompleteOK()on post の代わりに、そのアクションを削除して、 の HTTP Post アクションを作成しますpublic ActionResult PaymentByBankTransfer()

その後RedirectToAction("Complete");、PaymentByBankTransfer ポスト メソッドで戻ります。

これで問題が解決すると思います。

于 2012-12-16T15:09:18.853 に答える