Asp.net 将变量传递给动态下拉列表

Asp.net 将变量传递给动态下拉列表,asp.net,vb.net,data-binding,drop-down-menu,Asp.net,Vb.net,Data Binding,Drop Down Menu,我有两个下拉列表,一个是州,第二个是城市。我试图创建它,当用户单击状态时,第二个dropdownlist将填充数据表中的城市名称 这是密码 <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <%--<cc2:CascadingDropDown ID="CascadingDropDown1" runat="server"> </cc2:Cas

我有两个下拉列表,一个是州,第二个是城市。我试图创建它,当用户单击状态时,第二个dropdownlist将填充数据表中的城市名称

这是密码

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%--<cc2:CascadingDropDown ID="CascadingDropDown1" runat="server"> </cc2:CascadingDropDown>--%>
<h1>Live Event Search Engine</h1><br />
State: <asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="ST_Code" DataValueField="ST_Code" /><asp:SqlDataSource
    ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>"
    SelectCommand="SELECT [ST_Code] FROM [State]">
    </asp:SqlDataSource>
City:  <asp:DropDownList ID="ddlCity" runat="server" DataSourceID="SqlDataSource2" DataTextField="RS_City" DataValueField="RS_City" /><asp:SqlDataSource
    ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnection %>"
    SelectCommand="web_PublicProgramListbyState" SelectCommandType="StoredProcedure">
<SelectParameters>
        <asp:SessionParameter Name="State" SessionField="ST_Code" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>
       <asp:Button ID="Submit" runat="server" Text="Submit" />

</asp:Content>

我看不到ddlState\u SelectedIndexChanged事件在哪里写入会话变量。这是必需的。

当您已经定义了SqlDataSource时,您似乎正在尝试将数据集引入其中。只需修改SqlDataSource的参数并重新绑定:

Public Sub ddlState_SelectedIndexChanged(...)
    SqlDataSource2.SelectParameters.Clear()
    SqlDataSource2.SelectParameters.Add(New Parameter("@State", DbType.String, ddlState.SelectedValue))
    ddlCity.DataBind()
End Sub

编辑:或者您可以使用引用SqlDataSource2.SelectParameters中的ddlState.SelectedValue的控制参数,如另一个答案中所述。唯一的诀窍是你必须小心地管理你的默认值,这样ddlCity只能在你想要的时候绑定。

我会把它改成一个控制参数,然后调用数据绑定。不用自己填了

 <asp:ControlParameter Name="State" ControlID="ddlState" Type="String" /> 

或者,如果您想删除所有隐藏的代码,请将其放在带有触发器的更新面板中。

那么您要问的问题是什么?有错误吗?这不起作用吗?@Brian,嗯,它不起作用。“State”中的变量不会传递到“City”,City Dropdownlist也不会加载。我刚刚得到一个错误。代码显示程序绑定而不是城市?不管怎样,贴在下面。
 <asp:ControlParameter Name="State" ControlID="ddlState" Type="String" /> 
Me.ddlCity.DataBind()