在DetailsView的TemplateField中查找用户控件

我有一个我正在发布的DetailsView – 其中包含一个UserControl。 我在回发数据中遇到了一些困难。

举个例子:

    Some text here           

当我回发时,我会假设我会做这样的事情:

 MyUserControlType ucUserControl = dvDetailsView.FindControl("ucUserControl") as MyUserControlType; 

但这没有发现。 事实上,我甚至无法通过在QuickWatch中走动来找到这个孩子……

我需要做些什么才能找到这个东西?

编辑:事实certificate我的usercontrol id正在改变 – 但为什么? 我在插入和编辑模板上都有相同的ID,但是注释掉它没有任何区别。

DataBind控件之后,您将使用:

 dvDetailsView.Rows[0].Cells[0].FindControl("ucUserControl") 

并确保仅在编辑模式下执行此操作,因为控件仅存在于EditItemTemplate

事实certificate,用户控件名称已更改 – 我的usercontrol标记为“ucUserControl”,其名称已更改为通用名称 – “ctl01”。

所以,做一个dvSituation.Rows[0].Cells[0].FindControl("ctl01")找到了控件。

为了找到这个ID,我只看了一下正在渲染的HTML元素,并从id中检查了父元素,例如’ ctl00_MainContent_dvDetailsView_ctl01_lblLabel ‘,其中lblLabel出现在ucUserControl上。

rows列是基于0的字段索引,如果指定了headertemplate,则单元格索引将为1。

编辑 :天啊! 有人(我真的不是我,我发誓)隐藏了控件类的ID属性!

 public partial class UserControl : BaseControl { public int Id; } 

这意味着当ASP.Net生成id时,它不能,并且只是为控件分配了一个通用Id(在这种情况下为’ctl01’),而不是实际名称。

哇。