下拉列表不能正确选择项目
本文关键字:选择 项目 不能 下拉列表 | 更新日期: 2023-09-27 17:50:54
我在ASP做一个项目。净WebForms。虽然我已经做过很多次了,但这次下拉列表还是让我很困扰。
我从DB获取项目,然后将它们添加到我的下拉列表一个接一个使用FOR循环。这很好。但问题是,我不能舒适地从列表中选择一个项目,每当我试图从下拉列表中选择一个项目时,它就会将选择固定到第一个元素上,因此很难选择所需的项目。
我怎样才能解决这个问题?
假设我将光标移到列表中的第9项上,然后它也选择了第1项和第9项,速度如此之快,以至于我看到它们都被选中了。
后台代码protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DropDownList1.Items.Clear();
con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
con.Open();
adp = new SqlDataAdapter("select distinct family_head from family", con);
DataSet ds = new DataSet();
adp.Fill(ds, "family");
con.Close();
for (int i = 0; i < ds.Tables["family"].Rows.Count; i++)
DropDownList1.Items.Add(ds.Tables["family"].Rows[i][0].ToString());
}
}
ASPX
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:DropDownList ID="DropDownList1" runat="server" Width="150px">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" Width="150px">
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Height="30px" onclick="Button1_Click"
Text="Submit" Width="145px" BackColor="#465767" ForeColor="White" />
<asp:RoundedCornersExtender ID="Button1_RoundedCornersExtender" runat="server"
Enabled="True" TargetControlID="Button1" Corners="All" Radius="10">
</asp:RoundedCornersExtender>
<br />
<br />
<br />
</asp:Content>
一个CSS关键帧动画在页面背景中工作,这可能是一个原因吗?
关于WebControls的数据绑定如何工作,似乎存在某种混淆。最好的参考是:http://msdn.microsoft.com/en-us/library/ms178472.aspx
假设显示了DropDownList1的所有绑定代码:
DropDownList1.Items.Clear();
不应该是必需的,因为条目不应该在每次PostBack时持久化。(至少我是这样认为的,因为如果没有再次绑定数据源,那么每次PostBack之后所有Items都会丢失)。
如果你想使用下拉列表,下拉列表需要在每个PostBack上都有项目。您正在使用
if (!Page.IsPostBack)
这意味着,如果您有PostBack,则不会再次绑定项。在上面发布的链接中,你可以看到控件在loaddevent期间设置了它们的属性(比如在点击按钮之前选择了哪个项目),这意味着这些项目需要在生命周期的早期被绑定,比如在OnInit期间。
试试这样写:
protected void BindDropDownList1()
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
con.Open();
adp = new SqlDataAdapter("select distinct family_head from family", con);
DataSet ds = new DataSet();
adp.Fill(ds, "family");
con.Close();
for (int i = 0; i < ds.Tables["family"].Rows.Count; i++)
DropDownList1.Items.Add(ds.Tables["family"].Rows[i][0].ToString());
}
protected override void OnInit(EventArgs e)
{
this.BindDropDownList1();
base.OnInit(e);
}
另一个建议是使用DropDownList的DataSource属性,而不是DropDownList1.Items.Add
。如果您使用这种方法,您需要设置下拉列表的DataKeyValue和DataKeyMember属性:
protected void BindDropDownList1()
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["familyConnectionString"].ConnectionString;
con.Open();
adp = new SqlDataAdapter("select distinct family_head from family", con);
DataSet ds = new DataSet();
adp.Fill(ds, "family");
con.Close();
DropDownList1.DataSource = ds;
DropDownList1.DataBind();
}
编辑:
我想我发现了你的错误。您正在使用AjaxControlToolKit控件,但仍在使用ScriptManager
。大约2年,AjaxControlToolKit控件需要ToolkitScriptManager
。将ScriptManager
替换为ToolkitScriptManager