1

複数のページで動作するはずの DropDownList のセッションを保存するのに問題があります。これは私が今持っているコードです:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ddlOffice.SelectedValue = Session("Office")
End Sub

そして、これは値を割り当てるためのコードです...

Protected Sub ddlOffice_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlOffice.SelectedIndexChanged
    Session("Office") = ddlOffice.SelectedItem.Value.ToString
End Sub

最後の値をブレークポイントで確認したところ、確実に正しく渡されました.loadパラメーターに渡された値は「2」でしたが、これは正しいですが、SelectedIndexChangedセッション値はデフォルトで1に戻っているようです.常に。ポインタはありますか?

4

3 に答える 3

1

コントロール イベント ハンドラーは、イベントのPage_Loadに起動されます。ddlOffice_SelectedIndexChangedイベントハンドラも同様です。コードddlOffice.SelectedValue = Session("Office")Page_Loadフェーズで実行され、セッションには古い値が含まれています。これを回避するには、次のように変更ddlOffice_SelectedIndexChangedします。

Protected Sub ddlOffice_SelectedIndexChanged(
         ByVal sender As Object, 
         ByVal e As EventArgs) Handles ddlOffice.SelectedIndexChanged
     Session("Office") = ddlOffice.SelectedItem.Value.ToString
     ddlOffice.SelectedValue = ddlOffice.SelectedItem.Value.ToString
End Sub

また、Page_Loadイベントにチェックを追加します。

If Not Page.IsPostback
    ddlOffice.SelectedValue = Session("Office")

後者は必須ではありませんが、SelectedIndexChangedイベント ハンドラーがジョブを実行するため、ポストバックでは必要ありません。

于 2013-04-12T19:42:27.107 に答える
0

選択した値の割り当てをドロップダウン リストの DataBound イベントに移動し、次のようにセッション変数を文字列にキャストします。

ddlOffice.SelectedValue = (string)(Session("Office"))
于 2013-04-12T19:44:01.667 に答える
0

SelectedIndexChange イベントが問題であると確信しているようですが、これについて言及したいと思います。

あなたが示したように、この行をPage_Loadの一番上に置くと:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ddlOffice.SelectedValue = Session("Office")
End Sub

ドロップダウンに入力する必要があるデータがまだバインドされていないため、何も見つかりません。DDL の項目が静的 (マークアップで定義されている) でない限り、データをドロップダウンにバインドするために使用するコードの後に​​、選択した値を設定する必要があります。

于 2013-04-12T19:41:29.337 に答える