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

由于代码显示了最受好评的答案

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

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

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

4

2 回答 2

4

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

前 :

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

后 :

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

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

于 2014-12-23T10:58:09.097 回答
3

而不是调用public ActionResult CheckoutCompleteOK()发布,删除该操作并为public ActionResult PaymentByBankTransfer().

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

我认为这会解决你的问题。

于 2012-12-16T15:09:18.853 回答