如何让angularJS将数据发布到重定向到视图的MVC控制器

如何让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

我正在使用AngularJS向MVC操作方法发布一些数据。此操作方法将显示其备份视图或重定向到其他页面。目前所发生的一切是数据被发布,但重定向没有通过MVC发生。我正在使用angular的window.location方法完成此操作。我想知道是否有更好的方法,或者是否需要使用Angular发布不同的帖子

在A页上,我有角度脚本将数据发布到B页,如下所示:

        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在控制器中运行第二个函数