处理递归类别生成代码时出现问题

发布于 2024-12-28 03:36:51 字数 1754 浏览 1 评论 0原文

因此,我构建了一个递归函数来生成 Category 对象的集合。

[ChildActionOnly]
public ActionResult FindAllCategorias()
{
    var categoriasDb = _categoriaRepository.FindAllCategorias().Where(s => s.CategoriaPadreId == null);
    List<CategoriaModel> model = new List<CategoriaModel>();

    foreach (var categoria in categoriasDb)
    {
            model.Add(new CategoriaModel()
                            {
                                CategoriaId = categoria.CategoriaId,
                                Nombre = categoria.Nombre,
                                Encabezado = categoria.Encabezado
                            });
    }

    foreach (var categoriaModel in model)
    {
        categoriaModel.Subcategorias = FindSubcategoriesForCategory(categoriaModel.CategoriaId);
    }

    return PartialView(model);
}

private List<CategoriaModel> FindSubcategoriesForCategory(int id)
{
    var subcategorias = _categoriaRepository.FindAllCategorias().Where(c => c.CategoriaPadreId == id);

    List<CategoriaModel> subcategoriasModel = new List<CategoriaModel>();

    foreach (var subcategoria in subcategorias)
    {
        subcategoriasModel.Add(new CategoriaModel()
                                    {
                                        CategoriaId = subcategoria.CategoriaId,
                                        Nombre = subcategoria.Nombre,
                                        Encabezado = subcategoria.Encabezado,
                                        Subcategorias = FindSubcategoriesForCategory(subcategoria.CategoriaId)
                                    });
    }

    return subcategoriasModel;
}

现在在我的视图中,您建议我如何使用递归来吐出我选择的模板中的每个类别?我不知道如何在视图中进行类似的操作。

So I have built a recursive function that generates a collection of Category objects.

[ChildActionOnly]
public ActionResult FindAllCategorias()
{
    var categoriasDb = _categoriaRepository.FindAllCategorias().Where(s => s.CategoriaPadreId == null);
    List<CategoriaModel> model = new List<CategoriaModel>();

    foreach (var categoria in categoriasDb)
    {
            model.Add(new CategoriaModel()
                            {
                                CategoriaId = categoria.CategoriaId,
                                Nombre = categoria.Nombre,
                                Encabezado = categoria.Encabezado
                            });
    }

    foreach (var categoriaModel in model)
    {
        categoriaModel.Subcategorias = FindSubcategoriesForCategory(categoriaModel.CategoriaId);
    }

    return PartialView(model);
}

private List<CategoriaModel> FindSubcategoriesForCategory(int id)
{
    var subcategorias = _categoriaRepository.FindAllCategorias().Where(c => c.CategoriaPadreId == id);

    List<CategoriaModel> subcategoriasModel = new List<CategoriaModel>();

    foreach (var subcategoria in subcategorias)
    {
        subcategoriasModel.Add(new CategoriaModel()
                                    {
                                        CategoriaId = subcategoria.CategoriaId,
                                        Nombre = subcategoria.Nombre,
                                        Encabezado = subcategoria.Encabezado,
                                        Subcategorias = FindSubcategoriesForCategory(subcategoria.CategoriaId)
                                    });
    }

    return subcategoriasModel;
}

Now in my View, how do you suggestion I use recursion to spit out each Category in a template I choose? I'm not sure how to something like this in a View.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那一片橙海, 2025-01-04 03:36:52

您可以使用递归显示模板:

@model List<CategoriaModel>
<ul>
    @Html.DisplayForModel()
</ul>

然后为类别定义自定义显示模板 (~/Views/Shared/DisplayTemplates/CategoriaModel.cshtml):

@model CategoriaModel
<li>
    @Html.DisplayFor(x => x.Encabezado) ... and something else about the category  
    <ul>
       @Html.DisplayFor(x => x.Subcategorias)
    </ul>
</li>

您还可以找到 以下帖子对于优化代码和数据访问很有用。

You could use a recursive display template:

@model List<CategoriaModel>
<ul>
    @Html.DisplayForModel()
</ul>

and then define a custom display template for a category (~/Views/Shared/DisplayTemplates/CategoriaModel.cshtml):

@model CategoriaModel
<li>
    @Html.DisplayFor(x => x.Encabezado) ... and something else about the category  
    <ul>
       @Html.DisplayFor(x => x.Subcategorias)
    </ul>
</li>

You may also find the following post useful in terms of optimizing your code and data access.

风苍溪 2025-01-04 03:36:52

您可以尝试在方法中使用 MvcHtmlString.Create() 直接构建输出,也可以使用 razor 创建一个帮助程序来访问 ui 中的方法。

You could try building your output directly using MvcHtmlString.Create() within your methods or you can create a helper to access your methods in the ui using razor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文