簡體   English   中英

如何讓angularJS將數據發布到重定向到視圖的MVC控制器

[英]how to have angularJS post data to MVC controller which redirects to a view

我正在使用AngularJS將一些數據發布到MVC操作方法中。 此操作方法將顯示其后視圖或重定向到另一個頁面。 當前所有發生的事情都是數據被發布,但是重定向不是通過MVC發生的。 我正在使用angular的window.location方法完成此操作。 我想知道是否有更好的方法,或者是否需要使用Angular發布其他內容。

在AI頁上,有角度腳本將數據發布到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;
    }
);

在頁面BI上,希望重定向到另一個頁面。 這是我在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發布到操作方法B,它將一直執行所有代碼,直到if(boolCondition)語句為止。 由於我無法通過MVC影響重定向,因此我會在Angular中使用promise返回的成功或錯誤塊來實現。

我想知道是否有更好的方法可以做到這一點,或者我在這里做錯了什么,或者這是唯一可以接受的方法。 我如何才能有角度地切換到MVC操作方法,並讓進一步的重定向僅從那里繼續?

您不應將.success() / .error()模式與$http ,因為已棄用了該模式。 而是將then()與兩個參數一起使用,第一個參數是成功函數,第二個參數是錯誤函數。

$ http舊式的Promise方法成功和錯誤已被棄用。 請改用標准然后方法。 如果$ httpProvider.useLegacyPromiseExtensions設置為false,則這些方法將引發$ http / legacy錯誤。

您無需保證$http的結果正確無誤,因為$http返回一個Promise。 只需從您的服務返回$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;
});

使用此新的簡化代碼,您的Page A控制器將與以前一樣工作。 在服務器上,如果您想觸發該服務器,請確保發出500 http狀態代碼。

function() {
    //on error
    window.location = 'http://localhost:1234/home/B';
}

跑步。 響應標頭中的500將使AngularJS承諾在控制器中運行第二個函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM