如何在Dropdownlist for ASP.NET上获取当前项目

时间:2014-05-28 11:27:10

标签: c# asp.net sql

我的设计代码:

<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

预订始终是下拉列表的当前项目。当我选择其他人时,他们的页面会加载,但是下拉列表的当前值是预订,我可以回复本书的页面。

3 个答案:

答案 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;
   }
}