ProgramingTip

ASP.NET MVC 3 Razor 재귀 함수

bestdevel 2020. 10. 25. 12:44
반응형

ASP.NET MVC 3 Razor 재귀 함수


좋습니다. 목록 목록이 포함 된 목록을 표시하겠습니다.

표시 할 레벨이 몇 개인 지 알 수있는 방법이 없어서 여기가 이전 재귀 루틴을 깨는 곳이라고 생각했습니다.

나는 이것에 대해 정확히 어떻게 해야하는지에 문제가 있습니다.

이것은 지금까지 내가 가진 것입니다 (보기-단순화).

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

이제는 각 개체에 <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>
}

이를 위해 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)
}

참고 URL : https://stackoverflow.com/questions/6422895/asp-net-mvc-3-razor-recursive-function

반응형