如何在Razor View中编写递归函数?

时间:2011-10-18 17:31:12

标签: asp.net-mvc-3 asp.net-mvc-2

我有以下ViewModel:

 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 Razor recursive function

我最终得到了这段代码:

@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方法中没有任何东西可以渲染到View。 Howcome?

3 个答案:

答案 0 :(得分:3)

我认为这是因为您对ShowSubItems的调用是在代码块内,而不是在呈现块中。

试试这个:

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

答案 1 :(得分:1)

尝试这样称呼:

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

也在帮手内:

@ShowSubItems(subitem);

答案 2 :(得分:0)

在if语句之前放入'@'标记。除非您在其中的任何位置添加html标记,否则它将使其中的所有内容都变得更加清晰。