0

我的网页中有一个占位符,我将用户控件动态绑定到它。

我尝试遍历占位符内的所有控件并获取控件 ID,这是我的用户控件的 ID。控件 ID 基本上是我的用户控件的名称,带有下划线;因此,如果我的用户控件的名称是 dynamicControl.ascx,那么在我的 control.ID 中,我会得到 ASP.dynamicControl_ascx。现在我需要再次加载我的用户控件吗?如果是这样,我该怎么做,如何键入强制转换,以及如何在我的用户控件中找到 gridview?

用户控件是一个网格视图,我需要检索在控件内的文本框中输入的值。

4

2 回答 2

2

这里需要几个步骤/概念......

  1. 了解页面生命周期并了解在何处/何时绑定您的动态组件。通常这可以通过在 Page_Init 中进行绑定来完成,以便它们出现在回发视图状态绑定中。如果没有这种考虑,您的网格可能不存在,并且如果存在,大多数情况下将始终为空。有时无法将绑定移动到 Page_Init 中......在这些情况下,应该在 Biding Dynamic Controls 上搜索。有大量示例说明如何解决在回发时返回动态内容的各种方法。

  2. 无需遍历子控件列表 - 查看 FindControl。假设创建时为网格分配了“MyGrid”的 ID,并且用户控件被命名为 MyUserControl... 在回发时定位网格(假设处理了上面第一个中的视图状态问题) - 您可以简单地使用: grid = MyUserControl.FindControl("MyGrid")

当然,如果没有返回网格对象,则 MyGrid 不存在。

希望这可以帮助.....

于 2012-04-21T10:14:21.260 回答
1

这将帮助你 http://www.asp.net/web-forms/tutorials/master-pages/control-id-naming-in-content-pages-cs

这样我就能够找到动态添加的控制值。只需要提供您要查找的控件 ID。这里我的面板 id 是plnall,文本框 id 是txt_idcplacehld是内容占位符 id,ctl00 是母版页 id

MasterPage ctl00 = FindControl("ctl00") as MasterPage;

            ContentPlaceHolder cplacehld = ctl00.FindControl("ContentPlaceHolder2") as ContentPlaceHolder;
 Panel panel1 = cplacehld.FindControl("plnall") as Panel;
 TextBox txt = cplacehld.FindControl("txt_id") as TextBox;
                    value = txt.Text;
于 2012-04-21T10:50:30.053 回答