【问题标题】:Getting JSON From .NET Webmethod, for use in ng-repeat从 .NET Web 方法获取 JSON,用于 ng-repeat
【发布时间】:2015-02-19 09:39:57
【问题描述】:

好的,所以我已经四处搜索并获得了一些帮助。并非最不重要的答案:https://stackoverflow.com/a/24657665/1223463

但这就是我的立场:

我从 Web 方法中获取数据,并能够在页面上使用简单的{{data}} 显示它。但是,当我尝试遍历数据(它由两个 JSON 对象组成)并引用它们的数据键时,什么也没有显示。

Javascript:

angular.module("myApp", [])
            .controller("MyController", function ($scope, $http) {

                $scope.data = [];
                $scope.getData = function (item, event) {
                    $http.post('NGTest.aspx/GetGroups', { data: {} })
                        .success(function (data, status, headers, config) {
                            $scope.data = data.d;
                        });
                };

        }).config(function ($httpProvider) {

                $httpProvider.defaults.headers.post = {};

                $httpProvider.defaults.headers.post["Content-Type"] = "application/json; charset=utf-8";

            });

HTML:

<body ng-app="myApp">

    <div ng-controller="MyController" >
        <button ng-click="getData(item, $event)">Get data</button>
        <br/>

        {{data}}

        <div ng-repeat="d in data">
            {{d.ID}} a row
        </div>
    </div>
</body>

后面的代码:

[WebMethod(EnableSession = true)]
    public static string GetGroups()
    {
        return @"[{
            'ID': 1568,
                'Orgno': '282-1'
        }, {
            'ID': 1569,
                'Orgno': '8925-2'
        }]";
    }

所以,当我按下按钮时,我得到的数据显示为:[{ 'ID': 1568, 'Orgno': '282-1' }, { 'ID': 1569, 'Orgno': '8925-2' }] 简单明了。但是 ng-repeat 部分不会产生任何代码。

这是一个看似相同的小提琴:http://jsfiddle.net/eurythmech/t9jzbm06/

我可以看到它们之间的不同之处在于,在小提琴中,提供的 JSON 数据不带引号。

这是我需要解决的问题吗?如果有,怎么做?

【问题讨论】:

    标签: .net json angularjs webmethod


    【解决方案1】:

    您的数据似乎以字符串而不是对象的形式返回。您可以在 $http 调用中添加 eval :

    $scope.getData = function (item, event) {
       $http.post('NGTest.aspx/GetGroups', { data: {} })
       .success(function (data, status, headers, config) {
           $scope.data = eval(data.d);
       });
    };
    

    更好的方法是在您的 GetGroups 方法中返回一个对象数组,以便 ASP.NET 为您序列化它。更多信息就在那里WebMethod returning JSON but the response obj in my $.ajax() callback is only a string

    还有一件事,正如你所说,JSON 必须对字符串使用双引号(检查 http://www.json.org/

    【讨论】:

    • 谢谢! eval() 位工作得很好,但也许我会听从你的建议,并最终以更好的方式去做。 (我打算使用 .NET 的 JavaScriptSerializer 的实际代码,因为我不知道没有它我可以完成它:)
    猜你喜欢
    • 2015-06-20
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多