我确实关注了文章真正了解 ViewState(顺便说一句很棒的文章),并且填充我的下拉列表效果很好。我什至设置了一个几乎一样好的 OnSelectedIndexChange 事件。
我发现的问题是选择第 0 个索引时不会触发 SelectedIndexChanged 事件。然而,它在所有其他时间都这样做。
这是一些代码:
<asp:DropDownList runat="server" ID="DropDownList1" EnableViewState="false"
AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />
protected override void OnInit(EventArgs e)
{
this.DropDownList1.DataTextField = "Text";
this.DropDownList1.DataValueField = "Value";
this.DropDownList1.DataSource = fillQueueDropDown();
this.DropDownList1.DataBind();
base.OnInit(e);
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
OnSelectedQueueChanged(e);
}
public void OnSelectedQueueChanged(EventArgs e)
{
// Do stuff.
}
public event EventHandler queueNamesChangedEvent;
public void OnSelectedQueueChanged(EventArgs e)
{
if (queueNamesChangedEvent != null)
queueNamesChangedEvent(this, e);
}
我想我可以在 Page_Load 方法中进行某种类型的检查:
if(ViewState["selectedIndexChangedFlag"] != 1)
// raise OnSelectedChange event
或者有什么我可以在 OnInit() 方法中设置的东西,我每次都可以重新绑定这些数据?
看,我的自定义 EventHander 引发了一个事件,该事件被该控件所在的父页面捕获,以便父页面可以使用新选择的值执行一些操作。这目前适用于所选索引> 0的所有情况。
我在这个控件中创建了一个包含最近选择的索引的属性,在这种情况下,我的父页面可以在每个 Page_Load 上对这个属性值进行操作......不知道。
接受建议。或者如何强制此 SelectedIndexChanged 事件为第 0 个索引选择触发。