私は記事TRULLY Understanding ViewState (すばらしい記事btw)に従いましたが、ドロップダウンリストの作成はうまく機能しています。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 番目のインデックス選択に対して強制的に発生させる方法。