Использование UpdatePanel для второго DropDownList и установки первого DropDownList как триггер, кажется, работает и не обновляет всю страницу:
<asp:GridView ID="GridView1" runat="server" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl1_SelectedIndexChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="ddl2" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
обработчик событий для первого списка будет выглядеть следующим образом:
protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl1 = sender as DropDownList;
DropDownList ddl2 = ddl1.NamingContainer.FindControl("ddl2") as DropDownList;
// Modify the second DropDownList
...
}
UPDATE
Если вы предпочитаете использовать в ListView вместо GridView, вы можете получить эквивалентный результат с этой разметкой:
<asp:ListView ID="ListView1" runat="server" >
<LayoutTemplate>
<table>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl1_SelectedIndexChanged" />
</td>
<td>
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="ddl2" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
У вас есть вся информация на стороне клиента, чтобы изменить содержание второго DropDownList? Или вам нужно получить данные с сервера после выбора элемента в первом списке? – ConnorsFan
Мне нужно будет получить его с сервера, но при необходимости я могу загрузить его на клиентской стороне (о, вы имеете в виду просто сделать выбор невидимым?) –