2013-04-22 25 views
0

在ASPxPageControl中,我添加了一些動態創建的標籤和文本框。最初文本框的Text屬性是空的,直到最終用戶根據必要的信息填充文本框。使用反射c獲取動態創建的ASPxTextBox的Text屬性#

下一個步驟是按保存按鈕,出現這種情況時,在button_ClickEvent功能我正確地得到所有的控制,但文本屬性始終是空的,即使用戶已經填寫在文本框中

上午我錯過了我的代碼中的東西?

這裏是我的代碼:

PropertyInfo cntrlProperty; 
    foreach (System.Web.UI.Control cntrl in pControl.TabPages[1].Controls) 
    { 
      Type ControlType = testAssembly.GetType(typeof(ASPxTextBox)); 

      if (!cntrl.GetType().Equals(typeof(ASPxLabel)) && cntrl.GetType().Equals(ControlType)) 
      { 


      cntrlProperty = cntrl.GetType().GetProperty("Text"); 

      var value = cntrlProperty.GetValue(cntrl); 

       VALUES += String.Format("'{0}'" + ",", value); 
      } 


    } 

我也試圖動態創建我的控制時,設置一個默認的字符串,因爲這個默認的字符串是在文本框中,當控件呈現這個炒菜鍋的罰款。

比方說默認字符串=「只是一個字符串」;

直到在我的代碼這一點上超過該可變值=只是一個字符串 ,這是確定。

那麼我所做的是在運行時 現在默認的字符串看起來像

默認字符串=「只是一個字符串的追加(我「在文本框」中鍵入)一些文本爲「默認字符串」文本框」

,然後我按保存按鈕,事實證明,該變量它仍然保存值=只是一個字符串

任何想法爲什麼這happenig?

+0

你在哪裏把'只是一個字符串'的值放到你的文本框中? – 2013-04-22 12:10:43

+0

在頁面的page_load中,但是這個代碼就在我動態地創建控件的時候(我認爲你不需要它),並且同時你只需將Text屬性設置爲=「只是一個字符串」。 – 2013-04-22 14:23:11

回答

0

好的,我不認爲你需要反思。 您已經知道您定位的類型。當你不知道類型時,你通常會使用反射,或者你可能正在處理多種類型並試圖將它們放入一個模式中。

考慮一下:

foreach (System.Web.UI.Control cntrl in pControl.TabPages[1].Controls) 
    { 
     if (cntrl is ASPxTextBox) 
     { 
      VALUES += string.Format("'{0}' + ",", (cntrl as ASPxTextBox).Text); 
     } 
    }

如果這樣做,當你還沒有得到text屬性值,則可能是控制的內部問題,而不是捕捉在瀏覽器中輸入的文本當頁面通過LoadPostData階段時。

此外,您需要注意的是,使用ASP.NET AJAX添加控件時,此LoadPostData的成功之處在於,您需要在頁面上爲每次回發加載此控件,然後再創建它們以便能夠取回數值。

希望這會有所幫助。

+0

我試過你的代碼,我仍然無法獲得文本值。我認爲這個問題可能是你提到的那個(LoadPostData)或者是頁面生命週期的東西(我已經讀過了)。我希望你給我提供一些關於LoadPostData的有用鏈接,我一直在尋找並且沒有發現任何有用的東西。你認爲這個問題也可以通過** RegisterRequiresPostBack()**函數來實現嗎?我一直在閱讀,但我仍然無法得到它。 – 2013-04-22 17:33:27

+0

我想我需要使用回調而不是回傳,你認爲@Arturo Martinez? – 2013-04-22 17:38:15

+0

首先,您是否開發了自定義控件?或者這是第三方控制。如果這是第三方控件,請嘗試在他們的論壇中尋找可能的解決方案,因爲控件內部需要處理LoadPostData方法。 – 2013-04-22 18:27:01