循環有向グラフのノードを歩くコードを作成する方法はありますか?
私は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>