我正在使用.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();
}
答案 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.cshtml
和PurchaseFail.cshtml
放在客户端作为视图模板,并让客户端进行渲染:您发出过帐请求以提交订单,服务器接收订单并返回新的数据模型,客户端会获取数据模型并将其重新放入已经保存在内存中的视图中(如果选择以这种方式进行配置,则可以动态请求模板文件)。