我有以下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?
答案 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标记,否则它将使其中的所有内容都变得更加清晰。