Как написать рекурсивную функцию в Razor View? - PullRequest
2 голосов
/ 18 октября 2011

У меня есть следующая модель представления:

 public class AllQuestionsInCategoriesViewModel
 {
     public string Category_Name { get; set; }
     public string Category_Number { get; set; }
     public List<ShowQuestionViewModel> questions { get; set; }
     public List<AllQuestionsInCategoriesViewModel> SubCategories { get; set; }

     public AllQuestionsInCategoriesViewModel()
     {
         questions = new List<ShowQuestionViewModel>();
         SubCategories = new List<AllQuestionsInCategoriesViewModel>();
     }
 }

Я подписался на эту тему:

ASP.NET MVC 3 Рекурсивная функция бритвы

И я получил этот код:

@model List<MvcApplication3.Models.ViewModels.Category.AllQuestionsInCategoriesViewModel>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>PrintSchema</title>
    <link type="text/css" href="../../Content/Print.css" rel="Stylesheet" />
</head>
<body>

@{
    foreach(var cq in Model) {
        ShowSubItems(cq);
    }
}

@helper ShowSubItems(MvcApplication3.Models.ViewModels.Category.AllQuestionsInCategoriesViewModel MyObj)
{

    <h1>@MyObj.Category_Number  @MyObj.Category_Name</h1>
    foreach (var question in MyObj.questions)
    {
        @Html.DisplayFor(x => question, question.GetType().Name + "Print")
    }

    if (MyObj.SubCategories.Count != null || MyObj.SubCategories.Count != 0)
    {
        foreach(var subitem in MyObj.SubCategories)
        {
            ShowSubItems(subitem);
        }          
    }
}

</body>
</html>

Проблема в том, что метод ShowSubItems ничего не отображает. Модель не пуста, и представление может отображаться @Html.DisplayFor(x => x.question, question.GetType().Name + "Print") просто отлично, вне метода ShowSubItems. Но ничто не отрисовывается в представлении в методе ShowSubItems. Howcome

Ответы [ 3 ]

3 голосов
/ 18 октября 2011

Я думаю, это потому, что ваш вызов ShowSubItems находится внутри блока кода, а не в блоке рендеринга .

Попробуйте:

@{
    foreach(var cq in Model) {
        @ShowSubItems(cq)
    }
}
1 голос
/ 18 октября 2011

Попробуйте назвать это так:

@foreach(var cq in Model) {
    @ShowSubItems(cq);
}

Также внутри помощника:

@ShowSubItems(subitem);
0 голосов
/ 26 сентября 2018

поставьте тег '@' перед оператором if. Это сделает все внутри синтаксиса бритвы, если вы не добавите html-тег где-либо внутри него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...