3

JSON を使用して JsTree を表示しています。JSON は、再帰関数を介して文字列として構築されています。今、私はより小さな/それほど複雑でないツリーでいくつかのテストを行い、それを機能させました。JSONLint を使用して有効な JSON をチェックし、最終的に正しい構文を取得しました。意図した大きなツリーを表示しようとすると、読み込み中の .gif でスタックするだけです (以前は JSON が間違っていたため) が、JSONLint でチェックした後は正しかったです。

これについて考えられる原因はありますか?木が大きすぎるか何かではないかと思います。

再帰関数:

public void getViewTree(ref string tree, Int32? id = null)
        {
            var topNodes = (from items in db.AssessmentViewItems
                           select items).Take(1);

            #region getChildren via LINQ
            if (id == null)
            {
                topNodes = from items in db.AssessmentViewItems
                           where items.ParentAssessmentViewItemID == null
                           && items.AssessmentViewID == 17
                           select items;
            }
            else
            {

                topNodes = from items in db.AssessmentViewItems
                           where items.ParentAssessmentViewItemID == id
                           && items.AssessmentViewID == 17
                           select items;
            } 
            #endregion

            int counter = 1;
            int max = (int)topNodes.Count();
            foreach (var node in topNodes)
            {

                if (node.ParentAssessmentViewItemID == null)
                {
                    {\"id\":\"532topNode\",\"selected\":true},\"children\":[null,
                    tree += "{\"data\":\"" + node.Title.Trim().Replace("\"","").Replace("("," ").Replace(":"," ").Replace("-"," ").Replace("&","and").Replace("/"," ").Replace("\\"," ").Replace(","," ").Replace("•", " ") + "\",\"attr\":{\"id\":\"" + node.AssessmentViewItemID + "\", \"selected\":true}, \"children\":[";   

                    getViewTree(ref tree, node.AssessmentViewItemID);
                    tree += "}]";
                    if (counter < max)
                    {
                        tree += "},";
                    }
                }
                else if (node.Type.Equals("Legal Topic"))
                {
                    tree += "{\"data\":\"" + node.Title.Trim().Replace("\"", "").Replace("(", " ").Replace(":", " ").Replace("-", " ").Replace("&", "and").Replace("/", " ").Replace("\\", " ").Replace(",", " ").Replace("•", " ") + "\",\"attr\":{\"id\":\"" + node.AssessmentViewItemID + "\", \"selected\":true}";

                    if (counter < max)
                    {
                        tree += "},";
                    }

                }
                else
                {
                    var topNodes1 = from items in db.AssessmentViewItems
                               where items.ParentAssessmentViewItemID == node.AssessmentViewItemID
                               && items.AssessmentViewID == 17
                               select items;

                    if (topNodes1.Count() > 0)
                    {

                        tree += "{\"data\":\"" + node.Title.Trim().Replace("\"", "").Replace("(", " ").Replace(":", " ").Replace("-", " ").Replace("&", "and").Replace("/", " ").Replace("\\", " ").Replace(",", " ").Replace("•", " ") + "\",\"attr\":{\"id\":\"" + node.AssessmentViewItemID + "\", \"selected\":true}, \"children\":[";
                    }
                    else
                    {
                        tree += "{\"data\":\"" + node.Title.Trim().Replace("\"", "").Replace("(", " ").Replace(":", " ").Replace("-", " ").Replace("&", "and").Replace("/", " ").Replace("\\", " ").Replace(",", " ").Replace("•", " ") + "\",\"attr\":{\"id\":\"" + node.AssessmentViewItemID + "\", \"selected\":true}";
                    }

                    getViewTree(ref tree, node.AssessmentViewItemID);

                    if (topNodes1.Count() > 0)
                    {
                        tree += "}]";
                    }

                    if (counter < max)
                    {
                        tree += "}";
                        tree += ",";
                    }

                }

                counter++;
            }
        }

JS:

$(function () {
    $("#demoTree").jstree({
        "json_data": {
            "data": treeModel
        },
        "plugins": ["themes", "json_data", "ui"],

    });
});

再帰関数の呼び出し:

string tree = "[";

getViewTree(ref tree);

tree += "}]";

return View("About", "_Layout", tree);

Chrome Dev Tools を使用した後、次のエラーが表示されます。

Uncaught SyntaxError: Unexpected token ILLEGAL (program):54 Uncaught データも ajax 設定も提供されていません。

JSONLintの構文を確認しました。小さなツリーは、これら 2 つのエラーなしで正常に生成されます

4

1 に答える 1

2

DevExpress ツリーを使用して問題を解決しました。まったく同じ JSON 文字列。

于 2013-08-14T13:42:50.723 に答える