ASP.NET动态UserControl ID生成问题

时间:2009-04-07 09:18:51

标签: c# .net asp.net user-controls

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

htmlTextWriter的输出包含原始ID,但是在VS 2008调试器中检查Control的ID属性会显示它已更改。

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

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

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

4 个答案:

答案 0 :(得分:1)

您是否明确地从代码中为控件分配ID?

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

它没有解释为什么它会改变 - 我的猜测是...不是相同控制。由于某些原因,您可能会控制生成例程运行两次或者像这样运行。

在控制权被置换的地方设置一个断点,看看它是否被击中两次 - 如果是这样,你去,那就是你的问题。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

按钮btnSave = new Button();

btnSave.ID =“btnSave”;

string clientID = btnSave.ClientID;

如果您检查cientID,它将类似于“ctl88_99 _ *** _ btnSave”。

答案 3 :(得分:0)

是的我认为rAm是正确的......在我之前的经历中......我注意到显式id值一直有效并且会推荐相同的... Andy