Боже, моя голова убивает меня.
Хорошо, у меня есть контроллер, в который я хочу передать вложенные данные в представление.Что я делаю так:
namespace helpme.mvc.Controllers
{
public class CategoryController : Controller
{
private HelpMeContext db = new HelpMeContext();
public ViewResult Index()
{
var model = db.Category.Include(c => c.SubCategories).ToList();
return View(model);
}
}
}
Но это не работает.Подкатегории выходят пустыми, хотя в них есть строки.Любые предложения?
Используя точку останова, я вижу, что модель заполняется правильно, но ничего не отображается в представлении и не появляется сообщение об ошибке.
@model IEnumerable<helpme.mvc.Models.Category>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@Model.First().SubCategories.First().Name // UPDATE, THIS DISPLAYS A VALUE, SO WHY DOES THE CODE BELOW JUST DISPLAY THE FIRST LEVEL (Categories)?
<ul>
@foreach (var c in Model) {
<li>
<ul>
@foreach (var sc in c.SubCategories)
{
@Html.Display(sc.Name)
foreach (var ssc in sc.SubSubCategories)
{
@Html.Display(ssc.Name)
}
}
</ul>
</li>
}
</ul>
По какой-то причине он отображает только первый уровень, как если бы он не получил подкатегории, хотя точка останова доказывает, что он получил.ссылка:
public class Category
{
public Category()
{
SubCategories = new List<SubCategory>();
}
public int ID { get; set; }
[StringLength(255, MinimumLength = 1)]
public string Name { get; set; }
public ICollection<SubCategory> SubCategories { get; set; }
}
public class SubCategory
{
public SubCategory()
{
SubSubCategories = new List<SubSubCategory>();
}
public int ID { get; set; }
[Required()]
[StringLength(255, MinimumLength = 1)]
public string Name { get; set; }
public Category Category { get; set; }
public ICollection<SubSubCategory> SubSubCategories { get; set; }
}