2011-01-10 40 views
1

我有一個父控件具有HiddenField子控件的實例。我使用CreateChildControls()來添加它。一切都在客戶端運行,包括添加到該字段的值。然而,在回傳時,參考字段爲空隱藏字段不從視圖狀態加載回父內自定義控件內

這裏是代碼

protected override void CreateChildControls() 
    { 
     assignedListField = new HiddenField(); 
     assignedListField.ID = ClientID + "_HiddenAssignedList"; 
     assignedListField.EnableViewState = true; 

     Controls.Add(assignedListField); 
     base.CreateChildControls(); 
    } 

    public IList<DlpItem> GetAssignedItems() 
    { 
     //assignedListField = FindControl(ClientID + "_HiddenUnassignedList") as HiddenField; 
     var TmpAssignedItems = new List<DlpItem>(); 
     var list = assignedListField.Value; 
     var items = list.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries); 
     foreach (var item in items) 
     { 
      var mix = item.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); 
      var text = mix[0]; 
      var id = int.Parse(mix[1]); 
      TmpAssignedItems.Add(new DlpItem(text, id)); 
     } 
     return TmpAssignedItems; 
    } 

我試圖單純依靠ViewState的...然後也使用的FindControl()嘗試。它們都不起作用,它作爲一個空引用出現......關於這裏發生了什麼的任何輸入?

回答

3

正如@Sebastian所說,如果您需要使用任何控件,它們可能爲空,因爲它們不可用。但是,您可以調用EnsureChildControls來創建控件集合並確保其在那裏。這不包括加載ViewState。

但是,如果客戶端操作影響數據,則不能依賴視圖狀態。你需要做的是讓你的控件實現IPostBackDataHandler。在LostPostData中,您需要檢查隱藏的變量。使用postCollection [ClientID +「_HiddenAssignedList」],可以獲取發佈到服務器的字符串值,並處理結果。

HTH。

+0

愚蠢的錯誤。我忘了打電話EnsureChildControls()...我想我已經在我的代碼中有。那是修復。謝謝= D – 2011-01-10 19:22:00