使用反射c#获取动态创建的ASPxTextBox的Text属性

时间:2013-04-22 06:31:57

标签: c# reflection textbox devexpress dynamic-controls

在ASPxPageControl中,我添加了一些动态创建的标签和文本框。最初,文本框的Text属性为空,直到最终用户根据必要信息填充文本框。

下一步是按下保存按钮,当发生这种情况时,在button_ClickEvent函数中,我正确地获取所有控件,但即使用户填写了文本框,text属性也始终为空

我的代码中遗漏了什么?

这是我的代码:

    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);
          }


    }

此外,我尝试在动态创建控件时设置默认字符串,这很好,因为在呈现控件时,此默认字符串位于文本框中。

让我们说默认字符串=“只是一个字符串”;

直到我的代码中的变量 值=只是一个字符串 这没关系。

然后我做的是将一些文本追加(我在文本框中输入“)到运行时中的”默认字符串“ 现在默认字符串看起来像

默认字符串=“只是文本框中的字符串”

然后我按下保存按钮,结果变量 它仍然存储 值=只是一个字符串 < /强>

知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分: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成功,您需要在创建它们之后在页面上为每个回发加载此控件才能获得值回来了。

希望这有帮助。