2009-10-28 71 views
0

我想使用ListBox控件的選定值來填充文本框的Text屬性和HiddenField及其值屬性。這聽起來很簡單,我這個去:C# - 使用列表框填充其他字段

currentGroupTextBox.Text = currentSiteGroupList.SelectedItem.Text; 
currentGroupHiddenField.Value = currentSiteGroupList.SelectedValue; 

但在執行時,ASP.NET會返回一個錯誤:

Object reference not set to an instance of an object. 

和亮點的第一道防線。 currentGroupTextBox和currentGroupHiddenField是在ASPX文件中啓用的兩個控件,所以我不太確定爲什麼ASP.NET會抱怨實例化它們。

回答

1

我會嘗試將所有問題的答案彙總在一起,包括評論中的問題。

  1. 即使SelectionMode="Single",列表框開始時沒有什麼選擇的,除非你指定哪個項目應該在你的代碼中選擇。

  2. 要測試的SelectedItem爲null,使用下面的代碼:

if (currentGroupSiteList.SelectedItem != null) { 
    currentGroupTextBox.Text = currentSiteGroupList.SelectedItem.Text; 
    currentGroupHiddenField.Value = currentSiteGroupList.SelectedValue; 
} 
  • 什麼是您的Page_Load代碼加載列表框是什麼樣子?它是否包含if (!Page.IsPostBack)支票?如果沒有,按下按鈕並啓動回發將重新加載列表框,從而丟失用戶選擇的SelectedItem。
  • +0

    就是這樣。該列表在每個Page_Load中「重新加載」。什麼是最優雅的方式?當頁面顯示時,我仍然需要加載頁面,但是我需要確保SelectedItem不會同時被「重置」。 – Astaar 2009-10-30 14:51:33

    +0

    假設視圖狀態處於活動狀態,則不必在每次回發時加載列表框。所有你需要做的就是在你的列表框加載代碼之前加上if(!Page.IsPostPack)。 (實際上,將所有Page_Load代碼放入回發檢查中是一種很好的做法。 – 2009-10-30 15:05:10

    1

    我願意打賭,你的第一行在引用currentSiteGroupList.SelectedItem時感到窒息,因爲這似乎是最有可能成爲空引用的候選者。確保代碼在ASP.NET頁面生命週期內的正確位置執行,以便在幕後正確設置SelectedItem

    +0

    是不是通過選擇列表框中的項目來設置SelectedItem?此時通過單擊按鈕執行代碼,並在Page_Load()中填充該列表。 – Astaar 2009-10-28 22:06:24

    1

    您currentSiteGroupList.SelectedItem中的SelectedItem可能爲null(什麼表示沒有選擇)。你需要測試它之前,分配給currentGroupTextBox.Text

    +0

    如何使currentSiteGroupList.SelectedItem不爲null,如果不是通過選擇列表中的某些東西? SelectionMode被設置爲Single,所以我認爲即使在沒有主動點擊ListBox的情況下,默認(第一個)項目最初會至少設置屬性? – Astaar 2009-10-28 22:09:46

    +0

    此外,試圖測試currentSiteGroupList.SelectedItem返回相同的錯誤,因爲對象仍然沒有實例化。 – Astaar 2009-10-28 22:13:08

    +0

    @Furism:SelectedItem屬性將爲null,除非您手動選擇列表上的項目或以編程方式設置SelectedItem/SelectedItem屬性。您不能在設計時設置這些屬性,因爲它們被標記爲[Browsable(false)] – 2009-10-29 03:01:27

    0

    它是currentGroupTextBox或currentGroupTextBox是null? 在調試時,如果停在那條線..它是一個或兩個都不存在? 我發現的一個常見問題是控件放置在asp窗體視圖或類似的控件上,因此對該控件的引用實際上並不是它的id /名稱,但更可能需要執行;

    TextBox myTextBoxReference = (TextBox) formName.FindControl("currentGroupTextBox") 
    string theValue = myTextBoxReference.Text 
    

    另一個常見問題是頁面生命週期。因此,如果您的對象不在表單上,​​但可能在回發中存在之前引用它。 hth