在第三个嵌套转发器中查找动态添加的控件

发布于 2024-12-25 16:43:38 字数 695 浏览 5 评论 0原文

我有三个中继器。我们称它们为 R1、R2 和 R3。

R3 中,我在 Page_Init 中创建了一堆控件。例如,其中一个控件的名称为 WMC_image

我使用此代码来获取 R2:

Page.FindControl("R1").Controls[1].FindControl("R2")

这工作正常。但是当我添加代码来获取 R3: 时,

Page.FindControl("R1").Controls[1].FindControl("R2").Controls[1].FindControl("R3")

我收到错误:

“System.ArgumentOutOfRangeException:指定的参数超出了范围 有效值的范围。参数名称:索引”。

我怎么会收到此错误?如何获取 R3 内部的 HtmlGenericControl?

编辑:抱歉,但我忘记添加只有 R1 在 Page_Init 中填充 DataBind() 。其他两个中继器被填充在 OnItemDataBound 事件中,

当我循环出 R1 中的所有控件时,我得到了一堆点击,但即使我可以在我的网站上看到它们,我也没有得到任何结果。

I have three repeaters. Lets call them R1, R2 and R3.

In R3, I create a bunch of controls in Page_Init. For example, one of those controls has the name WMC_image.

Im using this code to get R2:

Page.FindControl("R1").Controls[1].FindControl("R2")

This works fine. But when I add the code to get R3:

Page.FindControl("R1").Controls[1].FindControl("R2").Controls[1].FindControl("R3")

I get the error:

"System.ArgumentOutOfRangeException: Specified argument was out of the
range of valid values. Parameter name: index".

How come I get this error? And how do I fetch the HtmlGenericControl inside of R3?

EDIT: Sorry but I forgot to add that only R1 get filled DataBind() in the Page_Init. The other two Repeaters gets filled in the OnItemDataBound event.

When I loop out all controls in R1, I get a bunch of hits. But I get nothing from R2 even tho' I can see them on my site.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

筑梦 2025-01-01 16:43:38

您需要在多行中执行此操作,而不是在一行中执行此操作:

您可能还想添加一些错误检查

Control R1;
Control R2;
Control R3;    

if (Page.HasControls()) {
  R1 = Page.FindControl("R1").Controls[1]
  if ( R1.HasControls()) {
    R2 = R1.FindControl("R2").Controls[1]
    if (R2.HasControls()) {
      R3 = R2.FindControl("R3")
    }
  }
}

Instead of doing it in one line you need to do this in multiple lines:

You'll probably want to add some error checking as well

Control R1;
Control R2;
Control R3;    

if (Page.HasControls()) {
  R1 = Page.FindControl("R1").Controls[1]
  if ( R1.HasControls()) {
    R2 = R1.FindControl("R2").Controls[1]
    if (R2.HasControls()) {
      R3 = R2.FindControl("R3")
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文