Как конвертировать AJAX Treeview в кнопки Link? - PullRequest
2 голосов
/ 18 июля 2011

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

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

Мое первоначальное понимание состоит в том, что это получится как список ex: bullet list.

1 Ответ

2 голосов
/ 20 июля 2011

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

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

Пример того, что будет производить следующий код

enter image description here

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 есть список дочерних объектов Person.Создавая ваши объекты таким способом, связывание ListView действительно так просто, как я показал.Используйте приведенный ниже объект Person для запуска быстрого примера, чтобы вы могли сами убедиться в этом.

Объект 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 ... Какой выбрать?

...