C# 解释ASP.NET Repeater唯一名称格式字符串中的差异

C# 解释ASP.NET Repeater唯一名称格式字符串中的差异,c#,asp.net,inamingcontainer,C#,Asp.net,Inamingcontainer,有人能解释一下为什么在ASP.NET应用程序中,当Repeater控件的子控件部署在不同的IIS服务器上时,它的name属性会以不同的方式生成吗 某些IIS服务器的名称是使用以下格式生成的: String.Format("{0}:_ctl{1:00}:{2}", RepeaterControlID, itemIndex, ChildControlID); e、 g e、 g 事实上,我相信一个是名字,一个是ID。我忘记了哪个是哪个,但名字和ID的规则是不同的 如果您确定它们都是名称,那么您确定

有人能解释一下为什么在ASP.NET应用程序中,当Repeater控件的子控件部署在不同的IIS服务器上时,它的name属性会以不同的方式生成吗

某些IIS服务器的名称是使用以下格式生成的:

String.Format("{0}:_ctl{1:00}:{2}", RepeaterControlID, itemIndex, ChildControlID);
e、 g

e、 g


事实上,我相信一个是名字,一个是ID。我忘记了哪个是哪个,但名字和ID的规则是不同的


如果您确定它们都是名称,那么您确定两台服务器的.NET版本相同吗?旧版本可能会以不同的方式生成它们的名称。

两个名称之间的区别在于,一个使用“$”分隔符,另一个使用“:”分隔符。在控件类上使用Lutz reflector表明这是由属性“EnableLegacyRendering”控制的,该属性与此有关


Google for EnableLegacyRendering以获取更多信息。

我确信它们都是生成名称属性的示例。ID属性将分隔符替换为下划线(\)。我还确信应用程序在所有服务器上都使用相同的ASP.NET版本(1.1)部署。在我的例子中,应用程序是使用ASP.NET 1.1部署的,它不支持xhtmlConformance system.web标记。我认为服务器上有一些奇怪的错误配置,它以不同的方式生成ID,并覆盖指定的ASP.NET版本。
<input name="Mntc_Software_List:_ctl1:id" id="Mntc_Software_List__ctl1_id" type="hidden" value="1772" />
String.Format("{0}$ctl{1}${2}", RepeaterControlID, itemIndex, ChildControlID);
<input name="Mntc_Software_List$ctl01$id" type="hidden" id="Mntc_Software_List_ctl01_id" value="1772" />