我正在使用 .NET MVC 和 AngularJS。发出发布订单请求后,我需要将创建的订单返回到不同的 View 。
我有两种看法。购买成功和购买失败。这是 Angular 中的 post 请求:
$http.post('/Home/PlaceOrder/', placeOrderViewModel)
.then(function (response) {
if (response != null) {
window.location = '/Home/PurchaseSuccess';
} else {
window.location = '/Home/PurchaseFail';
}
}, function () {
alert('error');
});
这是我的 MVC Controller 上的方法。
public ActionResult PlaceOrder(PlaceOrderViewModel viewModel)
{
}
它接受来自 Angular post 请求的 View 模型,并执行一些工作。然后我让它返 repo 买成功或购买失败 View ,并将订单模型附加到成功订单。
return View("~/Views/Home/PurchaseSuccess.cshtml", order);
return View("~/Views/Home/PurchaseFail.cshtml");
返回 View 不起作用。由于请求是从 Angular 发出的,MVC 似乎无法处理 View 的更改? Angular 成功处理程序中的重定向已经开始工作,并且在没有返回模型时效果很好。
我基本上只需要能够使用模型重定向到购买成功 View 。
感谢您的宝贵时间!
编辑:这是购买成功和购买失败 Controller 方法:
public ActionResult PurchaseSuccess()
{
return View();
}
public ActionResult PurchaseFail()
{
return View();
}
最佳答案
当您使用 Angular 发出请求时,您正在发出 Ajax 请求,其目的是在不离开当前页面的情况下从服务器端获取一些数据。
如果您确实想转到另一个页面,最好使用带有提交按钮和指向您要重定向到的页面的操作属性的普通表单。喜欢:
<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.cshtml
和 PurchaseFail.cshtml
作为 View 模板放在客户端,并让客户端渲染它:您发出一个发布请求来提交订单,服务器接收订单并返回一个新的数据模型,客户端获取数据模型并将其重新渲染到内存中已保存的 View 中(或者如果您选择以这种方式配置,则动态请求模板文件)。
关于javascript - 在 Angular/.NET MVC 中发出发布请求后如何使用模型进行重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51752431/