【问题标题】:Getting Text property of dynamic created ASPxTextBox with reflection c#使用反射c#获取动态创建的ASPxTextBox的Text属性
【发布时间】:2013-04-23 21:22:39
【问题描述】:

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


    }

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

假设默认字符串 = "just a string";

到此为止,我的代码中的变量 value = just a string 这没关系。

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

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

然后我按下保存按钮,结果发现变量 value 它仍然存储 value = just a string

知道为什么会这样吗?

【问题讨论】:

  • 你在哪里把值“只是一个字符串”放到你的文本框中?
  • 在页面的page_load中,但这段代码只是当我动态创建控件时(我认为你不需要它),同时你只需将Text属性设置为=“只是一个字符串”。

标签: c# reflection textbox devexpress dynamic-controls


【解决方案1】:

好的,我认为你根本不需要反思。 您已经了解您的目标类型。当您不知道类型或者您可能正在处理多种类型并尝试将它们放入一个模式中时,您通常会使用反射。

考虑一下:

    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 添加控件时成功,您需要在页面上为每个回发加载此控件,以便在创建它们之后能够获取返回值。

希望这会有所帮助。

【讨论】:

  • 我尝试了您的代码,但仍然无法取回文本值。我认为问题可能出在您提到的内容(LoadPostData)或与页面生命周期有关的内容(我已阅读)我希望您为我提供一些有关 LoadPostData 的有用链接,我一直在搜索,但没有发现任何帮助。你认为这个问题也可能是由 RegisterRequiresPostBack() 函数引起的吗?我一直在读这个,但我还是看不懂。
  • 我认为我需要使用 Callbacks 而不是 PostBacks,你觉得 @Arturo Martinez 怎么样?
  • 首先,您是否开发了自定义控件?或者这是第三方控制。如果这是第三方控件,请尝试在他们的论坛中寻找可能的解决方案,因为该控件在内部需要处理 LoadPostData 方法。
  • 您可以做的另一件事是研究从所有 HTML 表单字段发布到服务器的值。这将确认该值是否实际被发布。您可以从Page.Request.Form["<your control client ID>"] 访问它。如果使用这种方法找到了预期值,那么您可以确认是控制内部问题,或者您的页面逻辑以某种方式覆盖了发布的值。
猜你喜欢
  • 2015-06-02
  • 2011-02-15
  • 2011-04-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多