Запретить CascadingDropDown выполнять первоначальный вызов AJAX

Я собираюсь предварительно заполнить свои раскрывающиеся списки на стороне сервера. Я хочу, чтобы каскадный раскрывающийся список запускался только при изменении родительского элемента управления.


person Larsenal    schedule 14.10.2009    source источник


Ответы (1)


Заполните родительский ListBox из кода программной части и установите для его атрибута autopostback значение true. Установить OnSelectedIndexChanged="PopulateChildListBox"

Поместите дочерний ListBox в UpdatePanel и свяжите parentListBox с Updatepanel.

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="lbParent" />
        </Triggers>
        <ContentTemplate>
            <asp:ListBox ID="lbChild" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>

В коде программной части укажите, чтобы метод PopulateChildListBox заполнил дочерний элемент ListBox.

protected void PopulateChildListBox(object sender, EventArgs e)
{
    // Get the data for the child listbox
    lbChildListBox.DataBind();
}

Таким образом, ваш дочерний список обновляет свое содержимое (через Asp.Net AJAX) только при изменении родительского ListBox.

person Ralph Lavelle    schedule 19.10.2009
comment
Хм ... Я надеялся, что это будет менее сложный способ. - person Larsenal; 20.10.2009
comment
Что ж, вам нужно поместить хотя бы дочерний ListBox в UpdatePanel, это само собой разумеющееся. Вы также можете поместить туда родительский ListBox, но это было бы бессмысленно и действительно расточительно перерисовывать его при обратной передаче. Это означает, что вы должны связать его с UpdatePanel, следовательно, с разделом «Триггеры». И вам нужно заполнить дочерний ListBox в выделенном коде, как вы сказали, следовательно, «PopulateChildListBox ()». Так что я не понимаю, насколько проще вы могли бы это сделать. К тому же - все это совсем не сложно :-) - person Ralph Lavelle; 20.10.2009