2013-04-22 28 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