好的,我想显示一个包含列表列表的列表...
我没有办法知道有多少级别可以显示,所以我想这是我打破旧的递归例程的地方。
不过,我在如何处理这件事上遇到了麻烦。
这是我到目前为止所拥有的(在视图中-简化):
@foreach(MyObject item in @Model.ListOfObjects){
<div> @item.Title </div>
//Call recursive function?
}
现在,这些对象中的每个对象都有一个列表。我想要显示这个div下面的每个级别,例如,每个级别都有一个制表符缩进。
我认为Razor函数是这里要做的事情,但我需要一些帮助来形成它。我的想法是:
@functions{
public static void ShowSubItems(MyObject _object){
if(_object.ListOfObjects.Count>0){
foreach(MyObject subItem in _object.listOfObjects){
// Show subItem in HTML
ShowSubItems(subItem);
}
}
}
}
但正如您所看到的,我显然需要一些帮助:)
发布于 2011-06-21 18:34:04
Razor视图引擎允许编写带有@helper
关键字的内联递归助手。
@helper ShowTree(IEnumerable<Foo> foos)
{
<ul>
@foreach (var foo in foos)
{
<li>
@foo.Title
@if (foo.Children.Any())
{
@ShowTree(foo.Children)
}
</li>
}
</ul>
}
发布于 2011-06-21 17:26:51
我认为最好为此创建一个HTML帮助器。如下所示:
public static string ShowSubItems(this HtmlHelper helper, MyObject _object)
{
StringBuilder output = new StringBuilder();
if(_object.ListOfObjects.Count > 0)
{
output.Append("<ul>");
foreach(MyObject subItem in _object.listOfObjects)
{
output.Append("<li>");
output.Append(_object.Title);
output.Append(html.ShowSubItems(subItem.listOfObjects);
output.Append("</li>")
}
output.Append("</ul>");
}
return output.ToString();
}
然后这样叫它:
@foreach(MyObject item in @Model.ListOfObjects){
<div> @item.Title </div>
@html.ShowSubItems(item)
}
发布于 2021-04-20 01:28:29
在.Net核心中,我们必须使用@functions而不是helper标记。下面的代码可能对某些人有用。这里的"IssuerData“是我的自定义对象
@{
ShowTreeData(Model.HierarchyList);
}
@functions{
public static void ShowTreeData(IList<IssuerData> issuers)
{
<ul>
@foreach (var i in issuers)
{
<li>
@i.IssuerName
@if (i.Children.Any())
{
ShowTreeData(i.Children);
}
</li>
}
</ul>
}
}
https://stackoverflow.com/questions/6422895
复制相似问题