[asp.net-mvc]角度变化的 JSON 字符串

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

我试图在使用 AngularJS,ASP.NET 和 JSON.NET 的屏幕上显示一些数据。当我打电话 $.getJSON 它返回正常的 JSONArray,但是当我在 this.variablename 里面我角控制器把数据,数据更改和角不会显示它在我的视图中。

模型

public class Directory
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Note> Notes { get; set; }
    public int ParentId { get; set; }
    public List<int> DirectoryIds { get; set; }

    public virtual Directory Parent { get; set; }
    public virtual ICollection<Directory> Directories { get; set; }
}

.NET 的控制器操作

public string GetDirectories()
{
    var directories = db.Directories.Where(d => d.ParentId.Equals(0)).ToList();

    return JsonConvert.SerializeObject(new { directorylist = directories }, Formatting.Indented,
                    new JsonSerializerSettings
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    });
}

角的 JS

(function () {
    var app = angular.module('notes', []);

    app.controller('DirectoryController', function () {
        this.directories = directories; //Check output 1
    });

    var directories = $.getJSON("/Directory/GetDirectories", function (data) {
        return data; //Check output 2
    });
})();

输出 1(大图像http://i62.tinypic.com/2ppd0kg.png)The output that Angular makes of my JSON

输出 2

This is what I actually want to use but gets changed in output 1

解决方法 1:

因为粘土评论和保护一个解答,getJSON 调用是异步的这种方式,我不能填满 var directories 我的页面加载之前。

答案是使用 $http.get 从控制器和使用一个变量来存储控制器,与进行的上下文内 var cont = this 。然后我需要初始化我 directories 变量与一个空数组,以避免在页加载错误。

然后后来只是将指派 data 从内成功 Promise 到我 directories 变量。

(function () {
    var app = angular.module('notes', []);

    app.controller('DirectoryController', ['$http', function ($http) {
        var cont = this; //Save the context
        cont.directories = []; //Empty array to avoid errors on page load

        $http.get('/Directory/GetDirectories').
          success(function (data, status, headers, config) {
              //Save the async data to directories in the right context
              cont.directories = data;
          }).
          error(function (data, status, headers, config) {
          });
    }]);
})();

谢谢你的帮助。评论从 @Claies 和 @Protector 之一的回答帮助我自己找到一个合适的答案。

如果任何人有更好的答案,随意张贴它,所以我可以将它标记为答案。

赞助商