我的设计代码:
<asp:DropDownList ID ="DropDownList1" runat="server" EnableViewState="true" AutoPostBack ="true" CssClass="ddl" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryId" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Categories]"></asp:SqlDataSource>
C#代码:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Redirect("Products.aspx?catId=" + DropDownList1.SelectedValue);
}
在数据库类别表中:
Book 1
Movie 2
Game 3
Music 4
预订始终是下拉列表的当前项目。当我选择其他人时,他们的页面会加载,但是下拉列表的当前值是预订,我可以回复本书的页面。
答案 0 :(得分:0)
我认为问题在于列表会在每次回发时与SqlDataSource
绑定,因此您始终会获得第一个项目的值。
要确保这是问题所在,请将选择的顺序更改为DESC并查看您是否总是收到最后一项。
将您的SQL更改为
SELECT * FROM [Categories] ORDER BY CategoryId DESC
看看你是否总是得到4
。
如果那是问题所以你需要在页面加载中按代码绑定列表,如下所示:
if(!Page.IsPostback)
{
// code here
}
答案 1 :(得分:0)
您可以尝试两种方法 移动Page_Load中的下拉列表代码并使用
封装代码if(!Page.IsPostBack)
{
//your code
}
或
<%
if(!Page.IsPostBack)
{ %>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Categories]"></asp:SqlDataSource>
<%}
%>
答案 2 :(得分:0)
由于您正在进行重定向,这意味着您的页面将使用默认绑定再次加载,默认情况下选择第一个项目,订阅数据绑定事件并根据查询字符串参数执行选择。
<强> ASPX 强>
<asp:DropDownList OnDataBound="DropDownList1_DataBound" ...
C#
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
if(!IsPostBack){
string selectedValue = Request.QueryString["catId"];
if(!string.IsNullOrEmpty(selectedValue))
DropDownList1.SelectedValue = selectedValue;
}
}