1. ホーム
  2. c#

[解決済み] ASP.NET MVC 3 Razor 再帰関数

2023-07-17 22:33:04

質問

さて、私はリストのリストを含むリストを表示したいのですが...。

表示するレベルがいくつあるのか知る方法がないので、ここで古い再帰的なルーチンを取り出すことにしました。

しかし、具体的にどうすればいいのか困っています。

これが今のところあるものです(表示-簡略化)。

@foreach(MyObject item in @Model.ListOfObjects){ 
    <div> @item.Title </div>
    //Call recursive function?
}

さて、これらのオブジェクトはそれぞれ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);
             }
         }
     }
 }

しかし、お分かりのように、私は明らかにいくつかの助けを必要としています :)

どのように解決するのですか?

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>
}