1

asp.net 4.0 で Web アプリケーションを作成しています

Page_Loadイベントに文字列リストを追加する ListBox コントロールがある Web フォームがあります。ListBox からリスト項目を選択し、それを使用して計算したい場合、例外がListbox.SelectedValueスローされます。Object reference not set to an instance of an objectListbox.SelectedValue

"QuickWatch" (Visual Studio 2010) を使用することで、インデックス (たとえばListbox.Items[2])を指定することで値を取得できるという調査結果をいくつか得ましたが、Listbox.SelectedValueまたはListbox.SelectedIndex

私の問題は、このリストボックスが空ではないため、アイテムの選択時にリストボックスコントロールが null 例外エラーを表示するのはなぜですか?

4

2 に答える 2

3

ListBoxオン ポストバックを にバインドしていると思いますが、DataSourceそうですか? 次に、ListBox が失われますSelectedValue(SelectedIndexChangedイベントがトリガーされなくても)。

代わりに、初期ロードでのみデータバインドし、IsPostbackプロパティを確認する必要があります。

C#

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack) 
    {
        // pseudo code: 
        ListBox1.DatSource = GetYourDataSource();
        ListBox1.DataBind();
    }
}

VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        ' pseudo code: '
        ListBox1.DatSource = GetYourDataSource()
        ListBox1.DataBind()
    End If
End Sub
于 2012-06-12T19:43:03.660 に答える
1

私の理解によると、あなたがチェックListbox.SelectedValuePage_Loadている状況を再入力した後ListBox、SelectedIndex がリセットされ-1ます。そして、イベントハンドラーでSelectedValueorをチェックしようとしSelectedIndexているので、 になります-1

提案:
1. 最初の Page_Load で ListBox を設定します。

protected void Page_Load(object sender, EventArgs e)
{
 if(!IsPostBack) 
  {
    //Bind it once on first time page load
    MyListbox.DatSource = SqlDataSource1();
    MyListbox.DataBind();
  }
}


2. イベントを処理した後、MyListBox.
3. 入力するprotectedメソッドを作成する必要がありListBoxます。

注:「null例外」は、アイテムが選択されていないためです-1(実際にはPage_Loadでリセットされます)

于 2012-06-12T20:08:20.047 に答える