3

循環有向グラフのノードを歩くコードを作成する方法はありますか?

私はASP.NETMVCに少し慣れていません。現在のモードでは、含まれているロジックのスニペットを使用してビューモデルのデータをレンダリングしようとしています。

つまり、これを再帰的に行う方法がない場合、「MVCスタイル」を再帰的に行うための最良の方法は何でしょうか。

これが私がこれまでに得たものです。

モデル:

namespace AaronWeb.Models
{
    public class Node
    {
        public Node()
        {
            Nodes = new List<Node>();
            Data = string.Empty;
        }

        public ICollection<Node> Nodes { get; set; }

        public string Data { get; set; }

        public override string ToString()
        {
            if (Data != null)
            {
                return Data.ToString();
            }
            else
            {
                return string.Empty;
            }
        }
    }
}

意見

@model AaronWeb.Models.Node

@{
    var q = new Queue<AaronWeb.Models.Node>();
    q.Enqueue(Model);
}
<h1>Graph Partial View</h1>

@while (q.Count > 0)
{
    var node = q.Dequeue();
    <ul>
        <li>@node.ToString()
            @if (node.Nodes.Count > 0)
            {
                <ul>
                    @foreach (var child in node.Nodes)
                    {
                        <li>
                            @child.ToString()
                        </li>
                        q.Enqueue(child);
                    }
                </ul>
            }
        </li>
    </ul>
}

アクション方法

public ActionResult Graph()
{
    var model = new Node
    {
        Data = "Foo",
        Nodes = new[] {
             new Node
             {
                 Data = "Bar",
                 Nodes = new [] {
                     new Node
                     {
                         Data = "Bing"
                     },
                     new Node
                     {
                         Data = "Bang"
                     }
                 }
             },
             new Node
             {
                 Data = "Bat"
             },
         },
    };
    return View(model);
}

結果(間違った)

ここに画像の説明を入力してください

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Graph</title>
</head>
<body>
    <div>

<h1>Graph Partial View</h1>

    <ul>
        <li>Foo
                <ul>
                        <li>
                            Bar
                        </li>
                        <li>
                            Bat
                        </li>
                </ul>
        </li>
    </ul>
    <ul>
        <li>Bar
                <ul>
                        <li>
                            Bing
                        </li>
                        <li>
                            Bang
                        </li>
                </ul>
        </li>
    </ul>
    <ul>
        <li>Bat
        </li>
    </ul>
    <ul>
        <li>Bing
        </li>
    </ul>
    <ul>
        <li>Bang
        </li>
    </ul>

    </div>
</body>
</html>
4

1 に答える 1

10

私はこれを自分で理解しました。

重要なのは、部分ビューを再帰的に呼び出すことができることを認識することでした!

@model AaronWeb.Models.Node
<ul>
    <li>@Model.ToString()
        @foreach (var child in Model.Nodes)
        {
            Html.RenderPartial("_GraphPartial", child);
        }
    </li>
</ul>
于 2013-02-01T01:46:22.683 に答える