您好我正在尝试创建一个动态菜单,我似乎遇到了一些麻烦。 问题是,当运行应用程序时,只有属于最后一个类别的项目会针对所有类别重复显示。
有两个地方我可能犯了错误,但我不能确定wicth是我做的地方我还会发布我正在使用的两个表格的图表。这是图表:
我正在使用LINQ TO SQL来访问数据库,并创建了一个单独的类来执行此操作。这是访问数据的代码。这是我在将项添加到的第一个地方。字典aldo我用调试器调试了这个方法,似乎没关系,所以我发布了它:
public Dictionary<string , List<string>> subCatByCatList() {
Dictionary<string , List<string>> SubcatByCat = new Dictionary<string , List<string>>();
var subcategoriesByCategory = from category in dataContext.Categories
join subcategory in dataContext.SubCategories
on category.CatId equals subcategory.CatId
into cs
select new {
CategoryName = category.CatName ,
SubCategories = cs
};
List<string> subcategories = new List<string>();
foreach( var category in subcategoriesByCategory ) {
string CategoryName = category.CategoryName;
subcategories.Clear();
foreach( var subCategory in category.SubCategories ) {
subcategories.Add(subCategory.SubCatName);
}
SubcatByCat.Add(CategoryName , subcategories);
}
return SubcatByCat;
}
第二个地方是我试图显示数据的时候。这是我最有可能认为在我试图显示它时犯了错误的地方。这是代码:
@{
ComputerStoreDataAccess data = new ComputerStoreDataAccess();
Dictionary<string, List<string>> nav = data.subCatByCatList();
<ul>
@foreach (var category in nav)
{
<li><a href="#">@category.Key</a></li>
foreach (var subcategory in category.Value)
{
<div>
<ul>
<li>@subcategory</li>
</ul>
</div>
}
}
</ul>
}
修改
答案 0 :(得分:4)
在此循环中,您必须在每次迭代时创建subcategories
对象,否则您在SubcatByCat
中引用单个列表:
foreach( var category in subcategoriesByCategory ) {
string CategoryName = category.CategoryName;
subcategories = new List<string>(); // <-- create new object!
foreach( var subCategory in category.SubCategories ) {
subcategories.Add(subCategory.SubCatName);
}
SubcatByCat.Add(CategoryName , subcategories);
}