2014-01-16 84 views
0

我的DropDownList有問題。在閱讀了很多帖子之後,我仍然無法讓它工作得如此糟糕。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的值。當我在下拉列表中選擇電子郵件並單擊該按鈕時,即使我選擇了另一個電子郵件,它也總是將第一個值添加到文本框中。

我在做什麼錯?

回答

4

只記得ASP.NET是如何工作的,Page_Load被稱爲以前每個服務器往返的事件處理程序,然後列表被刷新爲默認值。只是檢查它不是一個回傳:

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

    // Your code here 
} 

編輯:一個小小的建議;你不是處置SqlCommandSqlReader,你應該提取值並儘快處置它們以釋放資源。這樣他們將被收集的氣相色譜,這可能是一個大問題,尤其是如果您的網站有很大的交通...

+2

下一步...爲什麼downvote? –

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(); 
    } 
    } 
} 
+0

根據[MSDN](http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.text(V = vs.110)。 aspx),'ListControl.Text'和'ListControl.SelectedValue'完全一樣。 – gilly3

+0

問題是控件在每次加載時都會重新綁定數據,因此一旦回發問題得到解決,這些屬性中的任何一個都應該可以工作。 –

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" />