【发布时间】:2023-03-20 10:03:02
【问题描述】:
我正在尝试在我的应用程序中实现树视图。我正在使用 MVC2 Preview 1 和 SubSonic 3 SimpleRepository。我是 MVC 和 Linq 的新手。
我的问题是我不确定如何将子节点列表添加到我传递回视图的模型记录中。所以我在我的模型类中添加了一个名为 Children 的 IEnumerable,并在控制器操作中填充:
public class Category
{
public Category()
{
}
public int ID { get; set; }
public int? ParentId { get; set; }
[Required(ErrorMessage="Name is required")]
public string Name { get; set; }
[SubSonicIgnore]
public IEnumerable<Category> Children { get; set; }
}
然后在控制器动作中,我提取所有记录并迭代更新 Children 成员:
public ActionResult Index()
{
var categories = _repo.All<Category>();
foreach (var c in categories)
{
c.Children = from p in _repo.All<Category>()
where p.ParentId == c.ID
orderby p.Name
select p;
}
return View(categories);
}
我的 2 个问题是 #1 为什么这不起作用?在循环范围之外,我的更改将丢失。 #2 一般来说,这是正确的方法吗?将此代码放入控制器中感觉就像是 hack。
【问题讨论】:
-
我认为您不清楚具体是什么不起作用?我同意这个逻辑不应该在控制器中。听起来存储库应该确保模型类正确补水。
-
使用调试器单步执行 foreach 我可以看到 c.Children 已设置。但是,类别的内容不会改变。我的问题是为什么这不起作用?
标签: asp.net-mvc linq subsonic3