有没有办法对循环有向图的节点进行编码?
我对 ASP.NET MVC 有点陌生,我所处的模式是尝试使用包含的逻辑片段在视图模型中呈现数据。
也就是说,如果没有非递归方式来做到这一点,那么递归“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>