树视图 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>

        }