如何让angularJS将数据发布到重定向到视图的MVC控制器
我正在使用AngularJS向MVC操作方法发布一些数据。此操作方法将显示其备份视图或重定向到其他页面。目前所发生的一切是数据被发布,但重定向没有通过MVC发生。我正在使用angular的window.location方法完成此操作。我想知道是否有更好的方法,或者是否需要使用Angular发布不同的帖子 在A页上,我有角度脚本将数据发布到B页,如下所示:如何让angularJS将数据发布到重定向到视图的MVC控制器,angularjs,asp.net-mvc,angular-ui-router,Angularjs,Asp.net Mvc,Angular Ui Router,我正在使用AngularJS向MVC操作方法发布一些数据。此操作方法将显示其备份视图或重定向到其他页面。目前所发生的一切是数据被发布,但重定向没有通过MVC发生。我正在使用angular的window.location方法完成此操作。我想知道是否有更好的方法,或者是否需要使用Angular发布不同的帖子 在A页上,我有角度脚本将数据发布到B页,如下所示: serviceDataFactory.POST('http://localhost:1234/home/B', someDat
serviceDataFactory.POST('http://localhost:1234/home/B', someData, pageConfig).then(function () {
//on success
window.location = 'http://localhost:1234/home/Index';
},
function() {
//on error
window.location = 'http://localhost:1234/home/B';
});
这是我的服务工厂
app.factory('serviceFactory', function($http, $q) {
var service = {};
//POST
service.POST = function (url, postData, conf) {
var d = $q.defer();
$http({
method: 'POST',
url: url,
data: postData,
config: conf
}).success(function(data) {
d.resolve(data);
}).error(function(error) {
d.reject(error);
});
return d.promise;
}
return service;
}
);
在B页上,我想重定向到另一页。这是我在MVC中的第B页
[HttpPost]
public ActionResult B(string someData)
{
//recieve string someData and perform some logic based on it
.
.
.
if(boolCondition)
return RedirectToAction("Index", "Home");
else
return View();
}
这里,一旦Angular发布到action方法B,它就会一直执行所有代码,直到if(boolCondition)
语句。因为我无法通过MVC影响重定向,所以我使用承诺返回的成功或错误块来实现重定向
我想知道是否有更好的方法来做到这一点,或者我是否做错了什么,或者这是唯一可以接受的方法。我如何才能切换到MVC操作方法,并让进一步的重定向仅从那里继续?您不应该将
.success()
/.error()
模式与$http
一起使用,因为。相反,使用带有两个参数的then()
,第一个参数是success函数,第二个参数是error函数
$http legacy promise方法的成功和错误已被删除
不赞成。改用标准then方法。如果
$httpProvider.useLegacyPromiseExtensions设置为false,则这些
方法将抛出$http/legacy错误
您不需要承诺$http
的结果,因为$http
返回承诺。只需从您的服务返回$http
app.factory('serviceFactory', function($http, $q) {
var service = {};
//POST
service.POST = function (url, postData, conf) {
return $http({
method: 'POST',
url: url,
data: postData,
config: conf
});
}
return service;
});
使用这个新的简化代码,页面A控制器的工作原理与以前相同。在服务器上,确保在需要触发
function() {
//on error
window.location = 'http://localhost:1234/home/B';
}
跑。响应头中的500将导致AngularJS promise在控制器中运行第二个函数。您不应将
.success()
/.error()
模式与$http
一起使用,因为。相反,使用带有两个参数的then()
,第一个参数是success函数,第二个参数是error函数
$http legacy promise方法的成功和错误已被删除
不赞成。改用标准then方法。如果
$httpProvider.useLegacyPromiseExtensions设置为false,则这些
方法将抛出$http/legacy错误
您不需要承诺$http
的结果,因为$http
返回承诺。只需从您的服务返回$http
app.factory('serviceFactory', function($http, $q) {
var service = {};
//POST
service.POST = function (url, postData, conf) {
return $http({
method: 'POST',
url: url,
data: postData,
config: conf
});
}
return service;
});
使用这个新的简化代码,页面A控制器的工作原理与以前相同。在服务器上,确保在需要触发
function() {
//on error
window.location = 'http://localhost:1234/home/B';
}
跑。响应头中的500将导致AngularJS promise在控制器中运行第二个函数