dropdownlist中的First Item根本不会触发SelectedIndexChanged

我有以下简单的代码:

   

这是我背后的代码

 using System; namespace Orbs { public partial class testForm: System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { label1.Text = "???!!"; } protected void dropdown1_SelectedIndexChanged(object sender, EventArgs e) { label1.Text = "Fired on " + dropdown1.SelectedValue; } } } 

当我第一次进入页面时, label1显示'???!!' 。 现在我从下拉列表中选择一个项目, label1显示正确的值但是当我在下拉列表中选择第一个项目时,它再次显示???!! 而不是Fired on 1Fired on 1

我做错了什么?

编辑:我注意到如果我在下拉列表中的任何项目中添加Selected="True" ,该项目将成为受害者并且不会触发事件!

对于仍有问题的人; 我以一种不同但更简单的方式解决了它:只需将一个虚拟ListItem添加到DropDownList的开头,并将该项的Enabled属性设置为false。 即

         

我自己解决了这个问题,

我在某处读到,关闭ViewStateMode会导致DropDownList无法正常工作。 在我的Web应用程序中,我不得不关闭ViewStateMode以实现一些全局任务并逐个打开它。

以某种方式打开DropDownList上的ViewStateMode是行不通的,我甚至尝试为页面和母版页打开ViewStateMode ,但DropDownList仍无法正常工作。 它只在我打开web.config ViewStateMode时才起作用。

由于打开web.config ViewStateMode不是一个选项,我找到并替代解决方案。 我把它包括在这里,希望能有所帮助。

  • 在表单中添加HiddenField
  • Page_Load比较HiddenField值与Request.Forms[DropDownList1.UniqueID]
  • 如果它们不同,请手动调用SelectedIndexChanged
  • HiddenField的值设置为Request.Forms[DropDownList1.UniqueID]值。

有同样的问题 – 当选择第一个选项时,SelectedIndexChanged不会触发,我不干净的解决方案是(不确定它是如此聪明但它对我有用),

在Page_Load我添加了以下脚本:

 if (!IsPostBack) { //bind data first time } else { int ddlSortByValue = int.Parse(ddlSortBy.SelectedValue); if (ddlSortByValue == 0) { ddlSortBy_SelectedIndexChanged(this, EventArgs.Empty); } } 

这样我强制启动SelectedIndexChanged事件

这个问题涵盖了所有可能性比其他post更好,所以我添加了这个明确的答案。 就我而言,@ Edyn的评论有效,即使最初的问题已经存在:

在下拉控件本身上设置ViewStateMode="Enabled"
我还在页面顶部的页面声明中设置它,以防万一。

这是.Net 4.0,所以也许有些东西被改变了(但肯定没有很好地修复)。

我有同样的问题,但我通过手动调用onindexchanged函数解决了它,如下所示:

 ddl_SelectedIndexChanged(null, null); 

我知道这可能不是完美的方式,但它对我有用。

发生这种情况是因为您将标签设置为“??? !!” 每一页活动。

您需要修改页面加载以检测fa没有发生Postback。

  protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { label1.Text = "???!!"; } } 

在我的情况下,这是因为我使用本地下拉列表变量引用了该下拉列表,并在函数末尾处理了该变量。 我在设置数据源后将第一项添加到下拉列表中。 花了我2个小时找到这个,并在我取消处理电话后工作得很好。