树视图 MVC 未正确填充
Tree View MVC Not being populated properly
我正在尝试创建树视图菜单,但无法正常工作。有 3 个不同的存储过程,第一个用于家庭(父),第二个用于类别(子),第三个用于报告(孙)。 Families SP 将用户 ID 作为参数并且似乎工作正常。类别 SP 采用 userID 和 familyID,第三类采用 userID、FamilyID 和 CategoryID。运行代码时,它会显示系列,并在下方显示 1 个报告名称。如果我从 foreach 循环中删除调用存储过程的代码行,它会为 1 个家庭执行 return 类别,尽管它显示在所有家庭中。
如果我在控制器上添加一个断点,它将通过循环并 return 正确的数据,所以我认为问题出在它的显示方式上。[显示的数据] 关于这个屏幕截图可以看到数据是如何显示的,EPOS 和 RES 从家庭 SP 和 WebBooking 返回,这是一个类别
FAMILIES
¦
¦--CATEGORIES
¦
¦
¦---REPORT_NAME
提前致谢!
在控制器上我正在调用每个存储过程,如果使用断点进行测试,所有应该 returned 的数据都被正确 returned。也许我的问题的解决方案是使用来自控制器的 returned 数据填充视图,但我不知道该怎么做?
控制器
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 中的复杂类型)的视图模型。在视图中,我正在查看每个复杂类型和 return 每个类型的名称,(系列、类别、名称)
查看
<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 生成的复杂类型中,而是将它们保存在该模型中。模型中的每个 class 都有一个用于保存数据的列表。如下所示。
型号:
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>
}
我正在尝试创建树视图菜单,但无法正常工作。有 3 个不同的存储过程,第一个用于家庭(父),第二个用于类别(子),第三个用于报告(孙)。 Families SP 将用户 ID 作为参数并且似乎工作正常。类别 SP 采用 userID 和 familyID,第三类采用 userID、FamilyID 和 CategoryID。运行代码时,它会显示系列,并在下方显示 1 个报告名称。如果我从 foreach 循环中删除调用存储过程的代码行,它会为 1 个家庭执行 return 类别,尽管它显示在所有家庭中。
如果我在控制器上添加一个断点,它将通过循环并 return 正确的数据,所以我认为问题出在它的显示方式上。[显示的数据] 关于这个屏幕截图可以看到数据是如何显示的,EPOS 和 RES 从家庭 SP 和 WebBooking 返回,这是一个类别
FAMILIES
¦
¦--CATEGORIES
¦
¦
¦---REPORT_NAME
提前致谢!
在控制器上我正在调用每个存储过程,如果使用断点进行测试,所有应该 returned 的数据都被正确 returned。也许我的问题的解决方案是使用来自控制器的 returned 数据填充视图,但我不知道该怎么做?
控制器
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 中的复杂类型)的视图模型。在视图中,我正在查看每个复杂类型和 return 每个类型的名称,(系列、类别、名称)
查看
<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 生成的复杂类型中,而是将它们保存在该模型中。模型中的每个 class 都有一个用于保存数据的列表。如下所示。 型号:
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>
}