我试图创建一个树视图菜单,但它不能正常工作。有3个不同的存储过程,第一个用于家庭(父母),第二个用于类别(孩子),第三个用于报告(孙子)。家庭SP以用户id作为参数,似乎工作得很好。类别SP接受userID和familyID,类别3接受userID、familyID和CategoryID。当运行代码时,它确实显示族,并在下面显示1报告名称。如果我从foreach循环中删除调用存储过程的代码行,它确实返回1个族的类别,尽管它显示所有族。
如果我在控制器上添加一个断点,它将通过循环并返回正确的数据,所以我认为问题在于它被显示的方式。[显示的数据]在这个屏幕截图上可以看到数据是如何显示的,从家庭SP和WebBooking返回的EPOS和RES是一个类别
FAMILIES
¦
¦--CATEGORIES
¦
¦
¦---REPORT_NAME
提前感谢!
在控制器上,我调用每个存储过程,如果用断点测试,所有应该返回的数据都被正确返回。也许我的问题的解决方案是用从控制器返回的数据填充视图,但我不知道如何做到这一点?
控制器
foreach (var cat in model.familiesReport = context.P_Mob_Get_ReportFamilies(user).ToList())
{
Console.WriteLine(cat.FamilyName);
foreach (var name in model.CategoriesReport = context.P_Mob_Get_ReportCategories(user, cat.FamilyID).ToList())
{
Console.WriteLine(name.Category);
foreach (var test in model.namesReport = context.P_Mob_Get_ReportNames(user, cat.FamilyID, name.CategoryID).ToList())
{
Console.WriteLine(test.ReportName);
}
}
我有一个视图模型,有3 SP_Results (EF中的复杂类型)。在视图中,我将遍历每个复杂类型并返回每个类型的名称(Family, Category, name)
<<p>视图/strong><ul>
@foreach (var family in Model.familiesReport)
{
<a href="#" class="menu_fam">@family.FamilyName</a>
<ul class="">
@foreach (var cat in Model.CategoriesReport)
{
<li href="#" class=""><a class="menu_cat"> @cat.Category</a></li>
<ul class="">
@foreach (var name in Model.namesReport)
{
<li href="#" class=""><a class="menu_name"> @name.ReportName</a></li>
}
</ul>
}
</ul>
}
</ul>
我终于找到了解决方案。我创建了一个新模型,并没有将存储过程的结果保存在EF生成的复杂类型中,而是保存在这个模型中。模型中的每个类都有一个将保存数据的列表。如下图所示。模型:
public class FamilyResultResponse
{
public List<Family> Families { get; set; }
public List<Sites> SitesGet { get; set; }
}
public class Family
{
public Nullable<int> FamilyID { get; set; }
public string FamilyName { get; set; }
public List<FamilyResultCat> FamilyCat { get; set; }
}
public class FamilyResultCat
{
public Nullable<int> familyid { get; set; }
public Nullable<int> CategoryID { get; set; }
public string Category { get; set; }
public int Allowed { get; set; }
public List<FamilyResulReportByCategory> FamilCatRep { get; set; }
}
public class FamilyResulReportByCategory
{
public Nullable<int> ReportID { get; set; }
public Nullable<int> categoryid { get; set; }
public string ReportName { get; set; }
}
控制器:遍历列表
public ActionResult Index(Guid? userID)
{
var model = new FamilyResultResponse();
model.Families=new List<Family>();
SPMenuModel modelSPMEnu = new SPMenuModel();
foreach (var f in context.P_Mob_Get_ReportFamilies(userID).ToList())
{
var fam = new Family();
fam.FamilyID = f.FamilyID;
fam.FamilyName= f.FamilyName;
fam.FamilyCat = new List<FamilyResultCat>();
Console.WriteLine(f.FamilyName);
foreach (var c in context.P_Mob_Get_ReportCategories(userID, f.FamilyID).ToList())
{
var famcat = new FamilyResultCat();
famcat.CategoryID = c.CategoryID;
famcat.Category = c.Category;
famcat.Allowed = c.Allowed;
famcat.FamilCatRep= new List<FamilyResulReportByCategory>();
Console.WriteLine(c.Category);
foreach (var n in context.P_Mob_Get_ReportNames(userID, f.FamilyID, c.CategoryID).ToList())
{
var famcatrep = new FamilyResulReportByCategory();
famcatrep.ReportID = n.ReportID;
famcatrep.ReportName = n.ReportName;
famcatrep.categoryid = n.categoryid;
Console.WriteLine(n.ReportName);
famcat.FamilCatRep.Add(famcatrep);
}
fam.FamilyCat.Add(famcat);
}
model.Families.Add(fam);
}
modelSPMEnu.familyResult = model;
return View(model);
视图
@foreach (var fam in Model.Families)
{
<a href="#" class="menu_fam"> @fam.FamilyName</a>
<ul class="">
@foreach (var cat in fam.FamilyCat)
{
<li href="#" class=""><a class="menu_cat"> @cat.Category </a></li>
foreach (var name in cat.FamilCatRep)
{
<ul class="">
<li class=""><a>@name.ReportName</a></li>
</ul>
}
}
</ul>
}