Dyn*_*nde 72 c# asp.net-mvc razor asp.net-mvc-3
好的,所以我想显示一个包含列表列表的列表......
我无法知道要显示多少级别,所以我认为这是我打破旧的递归例程的地方.
我确实遇到了如何解决这个问题.
这是我到目前为止(在视图中简化):
@foreach(MyObject item in @Model.ListOfObjects){
<div> @item.Title </div>
//Call recursive function?
}
Run Code Online (Sandbox Code Playgroud)
现在,每个对象也都有一个List <MyObject>.我想在这个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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但正如你所看到的,我显然需要一些帮助:)
Pao*_*tti 196
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>
}
Run Code Online (Sandbox Code Playgroud)
Edw*_*ing 12
我认为最好为此创建一个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();
}
Run Code Online (Sandbox Code Playgroud)
然后像这样称呼它:
@foreach(MyObject item in @Model.ListOfObjects){
<div> @item.Title </div>
@html.ShowSubItems(item)
}
Run Code Online (Sandbox Code Playgroud)
在.Net core中,我们必须使用@functions而不是辅助标签。下面的代码可能对某些人有用。这里的“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>
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27729 次 |
| 最近记录: |