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

Что я хочу сделать и создать: я хочу сделать 2 выпадающих списка в asp.net. Допустим, первый содержит страны, а второй содержит города в странах.

Допустим, я выбираю Англию в первом раскрывающемся списке, и тогда только города, принадлежащие Англии, будут видны или доступны для выбора во втором раскрывающемся списке.

<asp:DropDownList ID="Countries" runat="server">  // First dropdownlist
    <asp:ListItem>England</asp:ListItem>
    <asp:ListItem>Denmark</asp:ListItem>
</asp:DropDownList>

<asp:DropDownList ID="Citys" runat="server">    // Second dropdownlist
</asp:DropDownList>

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


person Carsten Løvbo Andersen    schedule 15.11.2013    source источник
comment
Откуда берутся Города, ваша база данных? В любом случае, на это уже много раз отвечали :). Если вы хотите сделать это без обновления страницы, вам нужно будет использовать AJAX.   -  person tymeJV    schedule 15.11.2013


Ответы (3)


Если вы используете SqlDataSource, вы можете каскадировать выбранное значение в CitySqlDataSource.

Вот демо -

База данных

   Countries                                Cities
Id       Name                    Id      CountryId      Name
1        England                 1            1         London
2        Denmark                 2            2         Copenhagen    

ASPX

<asp:DropDownList ID="CountryDropDownList" runat="server"
    DataSourceID="CountrySqlDataSource" 
   DataTextField="Name" DataValueField="Id" AutoPostBack="True">
</asp:DropDownList>
<asp:SqlDataSource ID="CountrySqlDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    SelectCommand="SELECT Id,Name FROM [Countries]"></asp:SqlDataSource>

<asp:DropDownList ID="CityDropDownList" runat="server"
    DataSourceID="CitySqlDataSource" 
    DataTextField="Name" DataValueField="Id">
</asp:DropDownList>
<asp:SqlDataSource ID="CitySqlDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    SelectCommand="SELECT Id,Name FROM Cities WHERE CountryId=@CountryId">
    <SelectParameters>
        <asp:ControlParameter ControlID="CountryDropDownList" 
            PropertyName="SelectedValue"
            Name="CountryId " Type="String" 
            DefaultValue="England" />
    </SelectParameters>
</asp:SqlDataSource>

Вот аналогичный ответ.

person Win    schedule 15.11.2013

Это называется каскадными раскрывающимися списками, и я рекомендую взглянуть на элемент управления ASP.NET AJAX Control Toolkit CascadingDropDownList.

Ознакомьтесь с руководством по Использование CascadingDropDown с базой данных.

По сути, вы собираетесь создать несколько (два в вашем случае) обычных серверных элементов управления с раскрывающимся списком ASP.NET, а также каскадный серверный элемент управления с раскрывающимся списком для каждого уровня каскада, который вы хотите. Это то, что объединяет два выпадающих списка вместе.

Все выборки данных выполняются с помощью методов страницы ASP.NET AJAX, которые, по сути, являются методами веб-службы, размещенными на странице, которые не имеют ссылки на саму страницу, потому что они статичны и отлично подходят для запроса данных с сервера через сценарий. (т.е. на стороне клиента) и вернуть его.

Примечание. По умолчанию методы страницы ASP.NET AJAX кодируют данные в JSON, поэтому вы не увидите никакой логики кодирования, если не хотите возвращать что-то помимо JSON (т. е. XML).

person Karl Anderson    schedule 15.11.2013

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

(Предостережение - собственный пост в блоге):

Фрагмент кода: каскадирование раскрывающихся списков

person IrishChieftain    schedule 15.11.2013
comment
Идея здесь, вероятно, состоит в том, чтобы предоставить декларативное решение, не используя код программной части, если это возможно... - person Yet Another Code Maker; 21.11.2013