上帝我的头在杀我。
好的我有一个控制器,我想将嵌套数据传递给视图。我这样做是这样的:
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);
}
}
}
但它不起作用。即使子行中有行,SubCategories也是空的。有什么建议吗?
使用断点我看到模型正确填充,但视图中没有显示任何错误信息。
以下是视图代码:
@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>
出于某种原因,它只显示第一级,就好像它没有收到SubCategories一样,即使断点证明它确实存在。
这是模型,仅供参考:
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; }
}
答案 0 :(得分:0)
也许明确地将您的model
定义为List<Category>
。怀疑它目前是ObjectQuery<Category>
?你能证实吗?
如您所知,您的视图需要IEnumerable<helpme.mvc.Models.Category>
。
尝试将模型明确地转换为View所需的类型。
List<Category> model = db.Category.Include(c => c.SubCategories).ToList();
问题的根源在于:在数据访问中,还是在访问View中的对象时,尚不清楚。您可以在该方法中加载一些虚拟类别和SubCat,并将已知的好值传递给您的视图吗?这将有助于确定问题所在。
答案 1 :(得分:0)
我猜想.Include().ToList()
可能没有做你认为正在做的事情。
SubCategories可能未映射到您传递给视图的Category对象。
尝试使用视图模型手动映射它们:
e.g。
public class PageViewModel
{
public PageViewModel()
{
this.Categories = new List<Category>();
}
public IEnumerable<Category> Categories {get;set;}
}
...等
在您的代码中:
var viewModel = new PageViewModel();
foreach (var category in db.Categories)
{
var categoryVM = new CategoryViewModel();
foreach (var subcategory in category.SubCategories)
{
categoryVM.SubCategories.Add(....
}
}
...等
首先只对一个级别(到SubCategory)进行确认。
答案 2 :(得分:0)
尝试替换
@Html.Display(sc.Name)
与
@sc.Name
另外请记住,您始终可以在视图代码中放置断点,并查看渲染的方式。 希望您觉得这个有帮助。 -zs