DropDownList仅选择第一个值

时间:2014-01-16 19:59:07

标签: c# asp.net sql 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;
}

这是我的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" />

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

我做错了什么?

3 个答案:

答案 0 :(得分:5)

只需记住ASP.NET如何工作,Page_Load在每个服务器往返的事件处理程序之前被称为,然后将列表刷新为默认值。只是检查它不是回发:

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

    // Your code here
}

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

答案 1 :(得分:0)

使用EmailList.SelectedValue;属性,该属性为您提供下拉列表的选定值。

另外,在Page_Load检查回发时,每次页面加载时都不会在下拉列表中添加重复的条目。

protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
    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();
    }
   }
}

答案 2 :(得分:0)

好像你不需要往服务器往返去做你想做的事情。普通的JavaScript:

<script>
    function setEmail() {
        var list = document.getElementById("<%= EmailList.ClientID %>");
        var textBox = document.getElementById("<%= EmailListe.ClientID %>");
        textBox.value = list.options[list.selectedIndex].text;
    }
</script>

<asp:DropDownList ID="EmailList" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>
<button onclick="setEmail(); return false;">Vælg Email</button>
<asp:TextBox runat="server" ID="EmailListe" TextMode="MultiLine" />