我的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值。当我在下拉列表中选择电子邮件并单击按钮时,它总是将第一个值添加到文本框中,即使我选择了另一个电子邮件。
我做错了什么?
答案 0 :(得分:5)
只需记住ASP.NET如何工作,Page_Load
在每个服务器往返的事件处理程序之前被称为,然后将列表刷新为默认值。只是检查它不是回发:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
// Your code here
}
编辑:一个小建议;如果您没有处置SqlCommand
和SqlReader
,则应提取值并尽快处理它们以释放资源。这样他们就会被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" />