在Angular / .NET MVC中发出发布请求后,如何使用模型重定向?

时间:2018-08-08 17:27:52

标签: javascript c# angularjs asp.net-mvc routing

我正在使用.NET MVC和AngularJS。在发出发布订单的请求后,我需要将创建的订单返回到另一个视图。

我有两种看法。购买成功和购买失败。这是Angular中的发布请求:

$http.post('/Home/PlaceOrder/', placeOrderViewModel)
                .then(function (response) {
                    if (response != null) {
                        window.location = '/Home/PurchaseSuccess';
                    } else {
                        window.location = '/Home/PurchaseFail';
                    }
                }, function () {
                    alert('error');
                });

这是我的MVC控制器上的方法。

public ActionResult PlaceOrder(PlaceOrderViewModel viewModel)
{

}

它接受来自Angular发布请求的视图模型,并执行一些工作。然后,我将返回购买成功或购买失败视图,并将订单模型附加到成功订单上。

return View("~/Views/Home/PurchaseSuccess.cshtml", order);

return View("~/Views/Home/PurchaseFail.cshtml");

返回视图无效。自从Angular发出请求以来,MVC似乎无法处理视图更改? Angular成功处理程序中的重定向已在起作用,当您没有返回模型时,重定向效果很好。

我基本上只需要能够使用模型重定向到购买成功视图。

谢谢您的时间!

编辑:这是购买成功和购买失败控制器的方法:

public ActionResult PurchaseSuccess()
        {
            return View();
        }

        public ActionResult PurchaseFail()
        {
            return View();
        }

1 个答案:

答案 0 :(得分:1)

当您使用Angular发出请求时,您正在发出Ajax请求,其目的是在不离开当前页面的情况下从服务器端获取一些数据。

如果确实要转到另一个页面,最好使用带有提交按钮和指向要重定向到的页面的action属性的普通表单。喜欢:

<form action="newPageUrl" method="post"> 
    ... // more inputs that carry the data you want to send to server side
    <input type="submit">
</form>

但是,当人们使用Angular时,他们更经常让Angular进行路由/渲染。这意味着您将PurchaseSuccess.cshtmlPurchaseFail.cshtml放在客户端作为视图模板,并让客户端进行渲染:您发出过帐请求以提交订单,服务器接收订单并返回新的数据模型,客户端会获取数据模型并将其重新放入已经保存在内存中的视图中(如果选择以这种方式进行配置,则可以动态请求模板文件)。