C# ASP.NET动态用户控件ID生成问题

C# ASP.NET动态用户控件ID生成问题,c#,.net,asp.net,user-controls,C#,.net,Asp.net,User Controls,在页面生命周期中,动态加载的UserControls的ID属性发生了变化,我遇到了一个问题。 更具体地说,当系统调用Page.Form.RenderControl(htmlTextWriter)时,ID属性会发生更改; 在调用之前,控件的ID为“ctl84”,但在调用之后,控件的ID为“ctl99” htmlTextWriter的输出包含原始ID,但是在VS 2008调试器中检查控件的ID属性会发现它已更改 该应用程序正在使用.NET 2.0的MCMS 2002(Microsoft CMS 20

在页面生命周期中,动态加载的UserControls的ID属性发生了变化,我遇到了一个问题。 更具体地说,当系统调用Page.Form.RenderControl(htmlTextWriter)时,ID属性会发生更改; 在调用之前,控件的ID为“ctl84”,但在调用之后,控件的ID为“ctl99”

htmlTextWriter的输出包含原始ID,但是在VS 2008调试器中检查控件的ID属性会发现它已更改

该应用程序正在使用.NET 2.0的MCMS 2002(Microsoft CMS 2002)框架内运行,该框架从1.1转换而来,并且未启用xhtmlConformance=“Legacy”

我需要ID在整个页面生命周期中保持不变


编辑:手动设置ID属性不是一个选项。

是否从代码中显式地为控件分配ID

如果你是,ID应该保持不变

但这并不能解释为什么它会改变-我猜是。。。不是相同的控件。由于某些原因,您可能会控制生成例程运行两次或类似的smt


在控件被genretated的位置放置一个断点,看看它是否被命中两次-如果是,那就是你的问题。

要确保它是控件的同一个实例,而不是另一个实例,请检查该控件的GetHashCode()方法

当包含asp.net控件时,在运行时生成的id会更改。您无法预测生成的确切客户端id。您可以使用用户控件提供的ClienID属性

按钮btnSave=新按钮()

btnSave.ID=“btnSave”

字符串clientID=btnSave.clientID


如果你检查cientID,它会像“ctl88\u 99\u***\ u btnSave”一样。

是的,我认为rAm是对的。。根据我以前的经验。。我注意到显式id值一直有效,并建议采用相同的方法。。Andy

我没有给控件分配任何ID,我故意让ASP.NET来分配ID。您这样做有什么原因吗?将断点放在控件被生成的位置,并查看它是否被命中两次-如果是,这是您的问题是的,这是因为它们是从MCMS系统加载的,您可以通过编辑器向虚拟页面添加一组控件,并让系统了解如何呈现它。因此,您不能在生成控件时设置断点?是的,我有,并且在页面生命周期中只命中一次。然而,我进一步发现,在Page.Form.RenderControl返回后,ID属性在调试器监视程序中显示为null,直到我访问ClientID或UniqueID,此时它被更改为“ctl99”。GetHashCode()在Page.Form.RenderControl()前后返回相同的数字ClientID也会更改,问题在于,ID在页面生命周期中发生更改。不在回发或重新加载页面上。回发是页面生命周期的一部分我同意clientID更改。使用客户端id是为了执行操作,而不是使用硬编码的客户端id。我猜您正在尝试从客户端访问控件。在这种情况下,请在页面末尾使用隐藏变量,并将该值设置为asp控件的clientid。