下拉列表中的不同值取决于我在另一个下拉列表中选择的内容

时间:2013-11-15 19:10:06

标签: asp.net webforms html-select cascadingdropdown

我想制作和制作:我想在asp.net中制作2个下拉列表。可以说第一个包含国家,第二个包含国家中的城市。

假设我在第一个下拉列表中选择了英格兰,然后只有属于英格兰的城市将在第二个下拉列表中可见或可选择。

<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>

我希望我解释得足够好,我希望有人能为我提供一些可以做到的代码或暗示它。

3 个答案:

答案 0 :(得分:2)

如果使用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>

以下是类似的answer

答案 1 :(得分:1)

它被称为级联下拉列表,我建议查看ASP.NET AJAX Control Toolkit CascadingDropDownList控件。

阅读Using CascadingDropDown with a Database获取教程。

基本上,您将创建多个(在您的情况下为两个)常规ASP.NET下拉列表服务器控件,以及您想要的每个级联级联的下拉列表服务器控件。这就是将两个下拉列表结合在一起的原因。

所有数据提取都是通过ASP.NET AJAX页面方法完成的,这些方法本质上是页面托管的Web服务方法,没有对页面本身的引用,因为它们是静态的,非常适合询问服务器数据通过脚本(即客户端)并返回它。

注意:默认情况下,ASP.NET AJAX页面方法将数据编码为JSON,因此除非您想要返回除JSON(即XML)之外的其他内容,否则您将看不到任何编码逻辑。

答案 2 :(得分:-1)

您可以使用常规下拉列表执行此操作,并使用代码隐藏中的处理程序使它们级联:

(警告 - 自己的博客文章):

Code Snippet: Cascading DropDownLists