0

在 ASPxPageControl 中,我添加了一些动态创建的标签和文本框。最初,文本框的 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);
          }


    }

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

假设默认字符串=“只是一个字符串”;

到目前为止,在我的代码上面的变量值 = 只是一个字符串 ,这没关系。

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

default string = "只是文本框中的一个字符串"

然后我按下保存按钮,结果它仍然存储的变量value = 只是一个字符串

知道为什么会这样吗?

4

1 回答 1

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 阶段时未在浏览器中捕获输入的文本。

您还需要注意的是,要使此 LoadPostData 在使用 ASP.NET AJAX 添加控件时成功,您需要在创建它们之后在页面上为每个回发加载此控件,以便能够取回值.

希望这可以帮助。

于 2013-04-22T14:56:38.933 回答