Asp.net如何从angular工厂向webservice传递ID?

发布时间: 2017/3/26 1:38:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我是一个angular 工作的新手。虽然我知道这是一个小问题,但我正纠结于如何将我的参数从angular工厂传递给web服务的语法。我的错误是来自web服务的参数id缺失。

这里是我的配置状态︰

            .state("productDetail", {
            url:"/products/:productId",
            templateUrl: "app/products/productDetailView.html",
            controller: "ProductDetailCtrl as vm",
            resolve: {
                productResource: "productResource",
                product: function (productResource, $stateParams) {
                    var productId = $stateParams.productId;
                    return productResource.getById.get({ productId: productId }).promise;
                }
            }

这里是我angular的资源︰

    angular
    .module("commonservices")
    .factory("productResource",  ["$resource", function($resource){        
        return {
            getAll:$resource("WebService.asmx/GetAll"),
            getById: $resource("WebService.asmx/GetById/:productId", { productId: '@productId' })
        };

    }]);

       

解决方法 1:

您的代码看上去很好,只有当它将打破的情况是,如果您不具有值 productId$stateParams ,试着通过做检查该值 console.log($stateParams.productId)

此外你有一个错字,而返回一个承诺从 $resource 对象。它应该 .$promise 而不是.promise

return productResource.getById.get({ productId: productId }).$promise

编辑

如果你想要将变量传递给 webmethod,它应该作为查询参数传递而不是通过它在 URL 直接通过假设它。这种转变您的资源如下

getById: $resource("WebService.asmx/GetById", { });

然后更改到您参数名称 id 作为它的名称,我们传递给 web 服务。它应作为查询参数传递,那么只有该参数将会阅读 WebMethod

return productResource.getById.get({ id: productId }).$promise

将形成 URL 像 WebService.asmx/GetById?id=1 (1 假设产品 id)。

官方微信
官方QQ群
31647020