Как преобразовать AJAX Treeview в кнопки ссылок?

Мне нужен совет по преобразованию элемента управления AJAX TreeView в LinkButton. Почему? Чтобы сделать страницу ASP.NET светлее. В настоящее время, когда выбран Nodes из TreeView, записи, относящиеся к этому узлу, отображаются в сетке. Эта реализация делает страницу тяжелой. Поэтому мы решили изменить это на LinkButtons.

Я просто хочу знать, что мне нужно сделать, подумать или это хорошая идея? Честно говоря, хорошая это идея или плохая, мне все равно нужно это делать.

Насколько я понимаю, это будет похоже на список ex: bullet list.


person furanzu    schedule 18.07.2011    source источник
comment
Хорошо, я думаю, что понял, как это сделать, используя ретранслятор с кнопками ссылок. Но проблема в том, что я не знаком с этим элементом управления. Будет 3 уровня кнопок ссылок (родительская кнопка ссылок, дочерние кнопки ссылок, дочерние кнопки ссылок). Возможно ли это ›?   -  person furanzu    schedule 19.07.2011


Ответы (1)


Следующий ответ основан на вашем комментарии и основан на ответе, приведенном в ваш другой вопрос.

В следующем примере вместо Repeater используется ListView. ListView хороши тем, что они дадут вам гораздо больше гибкости по сравнению с Repeater. Более того, как вы можете видеть в примере кода ниже, привязка вложенного / дочернего ListView и привязка вложенного / внучатого ListView может быть выполнена декларативно без какого-либо кода программной части.

Пример того, что даст следующий код

введите описание изображения здесь

ASPX

<asp:ListView runat="server" ID="lvw">
    <LayoutTemplate>
        <ul>
            <li id="itemPlaceholder" runat="server" />
        </ul>
    </LayoutTemplate>
    <ItemTemplate>
        <li>    
            <asp:LinkButton runat="server" CommandArgument='<%# Eval("Name")%>'><%# Eval("Name")%></asp:LinkButton>
            <asp:ListView runat="server" ID="lvw2" DataSource='<%# Eval("Children")%>'>
                <LayoutTemplate>
                    <ul>
                        <li id="itemPlaceholder" runat="server" />
                    </ul>
                </LayoutTemplate>
                <ItemTemplate>
                    <li><asp:LinkButton runat="server" CommandArgument='<%# Eval("Name")%>'><%# Eval("Name")%></asp:LinkButton>
                        <asp:ListView runat="server" ID="lvw3" DataSource='<%# Eval("Children")%>'>
                            <LayoutTemplate>
                                <ul>
                                    <li id="itemPlaceholder" runat="server" />
                                </ul>
                            </LayoutTemplate>
                            <ItemTemplate>
                                <li><asp:LinkButton runat="server" CommandArgument='<%# Eval("Name")%>'><%# Eval("Name")%></asp:LinkButton></li>
                            </ItemTemplate>
                        </asp:ListView>
                    </li>
                </ItemTemplate>
            </asp:ListView>
        </li>
    </ItemTemplate>
</asp:ListView>

C #

lvw.DataSource = personList;
lvw.DataBind();

Как видите, в коде C # я создал список «Человек» следующим образом. Каждый объект Person имеет список дочерних объектов Person, а каждый дочерний объект Person имеет список дочерних объектов Person. Создавая объекты таким образом, привязка ListView действительно так же проста, как я показал. Используйте объект Person ниже, чтобы запустить быстрый образец, чтобы вы могли убедиться в этом сами.

Объект "Человек"

public class Person
{
    public string name { get; set; }
    public List<Person> Children { get; set; }
}

Для вашего теста вы можете создать метод Page_Load следующим образом:

protected void Page_Load(object sender, EventArgs e)
    {
        List<Person> personList = new List<Person>();
        Person person1 = new Person() { name = "Child 1" };
        Person person2 = new Person() { name = "Child 2" };
        List<Person> childPersonList1 = new List<Person>();
        childPersonList1.Add(person1);
        childPersonList1.Add(person2);
        Person person3 = new Person() { name = "Person 1" };
        person3.Children = childPersonList1;
        personList.Add(person3);
        Person person4 = new Person() { name = "Child 3" };
        Person person10 = new Person() { name = "Grandchild 1" };
        Person person11 = new Person() { name = "Grandchild 2" };
        Person person12 = new Person() { name = "Grandchild 3" };
        List<Person> grandchildPersonList1 = new List<Person>();
        grandchildPersonList1.Add(person10);
        grandchildPersonList1.Add(person11);
        grandchildPersonList1.Add(person12);
        person4.Children = grandchildPersonList1;
        Person person5 = new Person() { name = "Child 4" };
        List<Person> childPersonList2 = new List<Person>();
        childPersonList2.Add(person4);
        childPersonList2.Add(person5);
        Person person6 = new Person() { name = "Person 2" };
        person6.Children = childPersonList2;
        personList.Add(person6);
        Person person7 = new Person() { name = "Child 5" };
        Person person8 = new Person() { name = "Child 6" };
        List<Person> childPersonList3 = new List<Person>();
        childPersonList3.Add(person7);
        childPersonList3.Add(person8);
        Person person9 = new Person() { name = "Person 3" };
        person9.Children = childPersonList3;
        personList.Add(person9);

        lvw.DataSource = personList;
        lvw.DataBind();
    }

См. Следующий вопрос StackOverflow, чтобы узнать больше о различиях между Repeater и ListView: Repeater, ListView, DataList, DataGrid, GridView ... Что выбрать?

person NakedBrunch    schedule 20.07.2011
comment
Не за что. Код мог помочь или у вас все еще есть проблемы? - person NakedBrunch; 21.07.2011
comment
Еще одна вещь, Элисон, я просто хочу спросить, если я использую ListView на своей странице, сделает ли это страницу светлее? Основная цель - сделать страницу светлее, поэтому мой первый выбор был простым вложенным повторителем ... Но если разница между ListView и Repeater с точки зрения легкости на странице минимальна, я думаю, что пойду с вашим предложением. - person furanzu; 21.07.2011
comment
Кстати, в ListView мне больше всего понравился вывод ListVew, потому что он уже маркирован и более презентабелен. - person furanzu; 21.07.2011
comment
@furanzu: Самым большим преимуществом ListView перед Repeater является простота использования. На мой взгляд, попытка создать трехуровневое вложенное решение с использованием Repeater было бы кошмаром. ListView легче, чем Repeater? В этом случае это, вероятно, не имеет значения, так как они оба будут светлыми. Какой из них вам понравится / вы предпочтете использовать? Определенно ListView. - person NakedBrunch; 21.07.2011
comment
@furanzu: Рад, что помог. Если вы не ищете других ответов, вы можете нажать на галочку слева от этого ответа, чтобы пометить его как правильный ответ. Я заметил, что вы не сделали этого ни по одному из своих вопросов. Отметка вопроса как правильного дает человеку, ответившему на вопрос, несколько баллов, это также побуждает других отвечать на ваши вопросы и позволяет другим людям с такими же / похожими проблемами находить полезные ответы / советы. Это хорошая карма, и поступать правильно. - person NakedBrunch; 22.07.2011
comment
Привет, Элисон! Извините, я не знал этого ... Я подумал, что достаточно щелкнуть стрелку вверх в главном ответе .. Спасибо, что сообщили мне .. - person furanzu; 22.07.2011
comment
Кстати, знаете ли вы, как увеличить расстояние между элементами в списке? Я погуглил, но ничего не нашел ... - person furanzu; 22.07.2011
comment
Немного CSS, примененного к размещенному списку, должно помочь. - person NakedBrunch; 22.07.2011
comment
@furanzu: Я только что понял, что вы все еще не понимаете, как отметить вопрос как ответ. Взгляните на следующую ссылку и увидите верхний ответ. Это объясняет все: meta.stackexchange. ru / questions / 5234 /. Вы когда-нибудь разбирали стили списка? - person NakedBrunch; 25.07.2011
comment
Привет, Элисон! Извините, я неправильно понял то, что вы сказали о том, как пометить свой ответ как ответ. Теперь я думаю, что понял это правильно, щелкнув галочку над вашим ответом. Сейчас мне нужно сделать в моем ListView всего 3 незначительные вещи: 1. Отрегулировать интервал между элементами. 2. Удалить подчеркивание для кнопок ссылок. 3. Включить подчеркивание выбранных кнопок. Я не знаю, возможны ли эти элементы. Если у вас есть идея, поделитесь ею со мной .. Спасибо! - person furanzu; 26.07.2011
comment
Это определенно возможно и должно быть легко осуществимо. Сегодня я не могу провести тест, но, надеюсь, завтра отправлю обновленный код. - person NakedBrunch; 28.07.2011
comment
Отключив подчеркивание в моих LinkButtons, я установил asp: LinkButton's CssClass = NoUnderlineLinkClass и определил его в моем файле css как a.NoUnderlineLinkClass: link {text-decoration: none;}, но он все еще не работает. Я думаю, здесь что-то не так. - person furanzu; 29.07.2011
comment
Регулируя интервал в моих LinkButtons, я установил свойства стиля margin-bottom и margin-top, и он работает. Что касается поиска выбранного LinkButton в моем ListView, в настоящее время я использую только метод FindControl в событии OnItemCommand чтобы узнать выбранный LinkButton. Я думаю, что было бы намного лучше, если бы я мог использовать ListView.SelectedItem или SelectedValue или что-то в этом роде ... - person furanzu; 29.07.2011