在Page Load中设置后,DropDownList.SelectedValue不正确

时间:2013-12-17 16:49:38

标签: c# drop-down-menu pageload

我在PageLoad中设置了DropDownList的选定项。

protected void Page_Load(object sender, EventArgs e)
{

strSelect2 = "SELECT * FROM [Order] WHERE orderId = '" + selOrder + "'";
cmdSelect3 = new SqlCommand(strSelect2, conNWind);
conNWind.Open();
dtrReader = cmdSelect3.ExecuteReader();

if (dtrReader.Read())
{
DropDownList1.Text = dtrReader["status"].ToString();
}
conNWind.Close();

之后,我有另一个函数来检索DropDownList中所选项的ID。

String cmd1 = "Select * from [Status] WHERE statusName = @statusName";
SqlCommand cmdSelectCat = new SqlCommand(cmd1, a);
a.Open();

cmdSelectCat.Parameters.AddWithValue("@statusName", DropDownList1.SelectedValue);
dtrReader = cmdSelectCat.ExecuteReader();

if (dtrReader.Read())
{
statusId = dtrReader["statusId"].ToString();
}
a.Close();

当我在DropDownList中选择另一个项目时,我尝试使用按钮上的函数在标签上打印。

Label9.Text = DropDownList1.SelectedIndex.toString();

但我获得的statusId是DropDownList在PageLoad上选择的ID。如何获取所选项目的值,而不是页面加载中的选定项目?旁边是使用IsPostBack

1 个答案:

答案 0 :(得分:0)

简短的回答是,您正在尝试组合服务器端和客户端代码。你已经通过ASP.Net进行了全局设置和加载,然后选择列表的'on-change'正在进行某种回发以调用服务器端函数。

您正在设置它以向服务器发出请求,因此它会重新加载整个页面。并且可能也会重置框中的选项。或者什么都不做。无论如何,你有很奇怪的功能,因为你试图在客户端和服务器之间混合功能。

我建议您通过在Page_Load()的开头和函数的起点设置一个停止点进行调试,并在更改值后查看服务器的确切操作。很可能你会对操作的顺序感到惊讶。

要做我认为你想做的事情,我想你可能不得不使用IsPostBack或Javascript。遗憾。

我建议你看看这篇文章: ASP.NET DropDownList OnSelectedIndexChanged event not fired 我认为你内心可能会有一些帮助。