Я собираюсь предварительно заполнить свои раскрывающиеся списки на стороне сервера. Я хочу, чтобы каскадный раскрывающийся список запускался только при изменении родительского элемента управления.
Запретить CascadingDropDown выполнять первоначальный вызов AJAX
Ответы (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
Хм ... Я надеялся, что это будет менее сложный способ.
- person Larsenal; 20.10.2009
Что ж, вам нужно поместить хотя бы дочерний ListBox в UpdatePanel, это само собой разумеющееся. Вы также можете поместить туда родительский ListBox, но это было бы бессмысленно и действительно расточительно перерисовывать его при обратной передаче. Это означает, что вы должны связать его с UpdatePanel, следовательно, с разделом «Триггеры». И вам нужно заполнить дочерний ListBox в выделенном коде, как вы сказали, следовательно, «PopulateChildListBox ()». Так что я не понимаю, насколько проще вы могли бы это сделать. К тому же - все это совсем не сложно :-)
- person Ralph Lavelle; 20.10.2009