DropDownList仅选择第一个值

Car*_*sen 0 c# sql asp.net html-select

我的DropDownList有问题.在阅读了很多帖子后,我仍然无法让它工作如此恶心.

这是我的C#代码:

protected void Page_Load(object sender, EventArgs e)
{
    using (SqlConnection connection = new SqlConnection("Data Source=PCM13812;Initial Catalog=Newsletter;Integrated Security=True"))
    {
        connection.Open();
        SqlCommand cmd = new SqlCommand();
        cmd = new SqlCommand("Select Email From Newsletter", connection);
        EmailList.DataSource = cmd.ExecuteReader();
        EmailList.DataTextField = "Email";
        EmailList.DataBind();
    }
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{

}
protected void Vælg_Click(object sender, EventArgs e)
{
    EmailListe  .Text = EmailList.Text;
}
Run Code Online (Sandbox Code Playgroud)

这是我的Asp代码:

<asp:DropDownList ID="EmailList" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>
    <asp:Button runat="server" ID="Vælg" Text="Vælg Email" OnClick="Vælg_Click" />
    <asp:TextBox runat="server" ID="EmailListe" TextMode="MultiLine" />
    <asp:TextBox ID="Besked" runat="server" />
Run Code Online (Sandbox Code Playgroud)

如您所见,我从SqlDatabase获取DropDownList值.当我在下拉列表中选择电子邮件并单击按钮时,它总是将第一个值添加到文本框中,即使我选择了另一个电子邮件.

我究竟做错了什么?

Adr*_*tti 5

只记得ASP.NET的工作方式,每个服务器往返的事件处理程序之前Page_Load调用,然后将列表刷新为默认值.检查一下它不是一个回发:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
        return;

    // Your code here
}
Run Code Online (Sandbox Code Playgroud)

编辑:一个小建议; 你不处置SqlCommandSqlReader,你应该提取值,并尽快处理掉以释放资源.这样他们就会被GC收集,这可能是个大问题,特别是如果你的网站流量很大......