Иерархические данные в ASP.NET MVC

Я пытаюсь найти лучший способ отобразить некоторые иерархические данные во вложенном неупорядоченном списке с помощью ASP.NET MVC. Есть ли у кого-нибудь советы, как это сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 983
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы имеете в виду ... вам нужно какое-то древовидное представление?

На самом деле вы можете заставить работать древовидный элемент управления ... но вы должны обернуть его тегом формы на стороне сервера для работы. Вы получите обычную неприятность, которую это приносит (например, сгенерированные идентификаторы и состояние просмотра), но это будет работать с точки зрения рендеринга.

Если вы хотите просто создавать теги и вкладывать их, это будет довольно просто сделать с помощью циклов foreach ().

Ответ принят как подходящий

Я предлагаю плагины jquery tree view, чтобы заставить его функционировать как дерево, но что касается рендеринга, просто поместите его в рекурсивный помощник лямбда для выполнения вложенности.

jquery для treecontrol звучит как хорошая идея, спасибо за предложение. Не могли бы вы подробнее рассказать, как использовать рекурсивную лямбду для рендеринга.

Joel Cunningham 12.09.2008 16:23

Для этого (рендеринг иерархического меню, древовидного представления и т. д.) Я использую рекурсивные вызовы пользовательского компонента (ascx или aspx в новом превью5) .
Я даю компоненту первый уровень элементов (список элементов), а затем компонент проверяет каждый элемент в списке, есть ли какие-либо дочерние элементы, и вызываю себя со списком этих дочерних элементов. Вы можете построить иерархический граф объектов в контроллере или просто одномерный список со свойством ParentID.

Я считаю, что в настоящее время такого контроля нет ... TreeView по своей природе сложны. Конечно, вы можете сколько угодно «рисовать» иерархию, используя всевозможные повторители и циклы, но чтобы получить функциональность древовидного представления, такого как в наборе инструментов веб-форм ... вам нужно подождать!

Почему бы вам не передать вашу модель в виде дерева в представление?

/// This is the model class
public class MyTreeNode<T>
{
    public ICollection<MyTreeNode> ChildNodes {get;}
    public T MyValue { get; set; }
    bool HasChildren { get { return ChildNodes.Any(); } }
}

///This is the html helper:
public static string RenderTree<T>(this HtmlHelper html, MyTreeNode<T> root, Func<T, string> renderNode)
{
    var sb = new StringBuilder();
    sb.Append(renderNode(root.MyValue));
    if (root.HasChildren)
    {
        foreach(var child in root.ChildNodes)
        {
            sb.Append(RenderTree<T>(html, child, renderNode));
        }
    }
    return sb.ToString();
}

На самом деле я не тестировал этот код, но он об идее. Вы можете представить себе создание своего собственного рекурсивного помощника HTML для визуализации дерева.

Хорошо, вам нужно добавить некоторый пользовательский элемент управления, который выполняет рендеринг при интеграции с плагином jquery treeview для максимальных функций ... Все еще нужно некоторое улучшение форматирования узла ... например, если он должен отображаться как ссылка ... спасибо

Jalal El-Shaer 16.01.2010 20:37

Другие вопросы по теме