C# ASP.NET动态用户控件ID生成问题
在页面生命周期中,动态加载的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在整个页面生命周期中保持不变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
编辑:手动设置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。