Okay, ich möchte eine Liste mit Listen von Listen von Listen anzeigen ...
Ich habe keine Möglichkeit zu wissen, wie viele Ebenen angezeigt werden sollen, also dachte ich, hier breche ich die alte rekursive Routine aus.
Ich habe jedoch Probleme damit, wie ich genau vorgehen soll.
Folgendes habe ich bisher (im Blick - vereinfacht):
@foreach(MyObject item in @Model.ListOfObjects){
<div> @item.Title </div>
//Call recursive function?
}
Jetzt hat jedes dieser Objekte auch eine Liste <MyObject>. Ich möchte jede Ebene unterhalb dieses Bereichs anzeigen, beispielsweise mit einem Tabulatoreinzug pro Ebene.
Ich dachte, eine Rasiermesserfunktion wäre hier das Richtige, aber ich brauche Hilfe bei der Gestaltung. Hier ist mein Denken:
@functions{
public static void ShowSubItems(MyObject _object){
if(_object.ListOfObjects.Count>0){
foreach(MyObject subItem in _object.listOfObjects){
// Show subItem in HTML
ShowSubItems(subItem);
}
}
}
}
Aber wie Sie sehen, brauche ich einfach Hilfe :)
quelle
@helper
s in ASP.NET Core verschwunden. Inline-Funktionen sind eine mögliche Alternative: github.com/aspnet/Razor/issues/715#issuecomment-272890766 , sehen aber viel weniger lesbar aus!Ich denke, es ist am besten, einen HTML-Helfer dafür zu erstellen. Etwas wie das:
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(); }
Dann nenne es so:
@foreach(MyObject item in @Model.ListOfObjects){ <div> @item.Title </div> @html.ShowSubItems(item) }
quelle