2010-10-26 50 views
1

去年,我们将所有新功能移至ASP.NET MVC。ASP.NET 4 webforms clientid后缀为`_0`

但是,我们仍然有一大堆遗留的WebForms页面有很多JavaScript代码,我们不会很快有机会升级它们。

最近我们也转移到ASP.NET 4,这似乎已经打破了这些遗留页面上JavaScript代码的负载。

凡在客户端ID是:

ctl001_masterControlName_panelControlName_controlWeWant 

现在他们已经成为:

ctl001_masterControlName_panelControlName_controlWeWant_0 

在这情况下_0后缀从何而来? panelControlName中只有一个controlWeWant,所以后缀不会添加任何值。

我知道硬编码的客户端ID是WebForms的一个坏主意;我们转移到ASP.NET MVC的原因之一是WebForms生成的糟糕的HTML。但是,对于这些遗留代码,我们坚持使用它,并且我宁愿不去改变它(直到有一天我们有足够的空闲时间才能正确完成它)。

为什么ASP.NET 4根本不添加_0后缀?

我可以关闭它吗?

有没有其他方法可以避免它?

回答

1

结帐What is New in ASP.NET 4.0 - ClientID Generation for a Cleaner MarkUp。它涉及到id生成时解释了ASP.NET 4.0中的一些新功能。

+0

这真是太好了 - 看起来未来的WebForms程序员将能够使它产生稍微低一点的HTML(那些尚未运行MVC山丘的HTML)。不幸的是,它并没有回答我的问题:为什么它将'_0'添加到客户端ID,以及如何在不重写所有内容的情况下将其删除? – Keith 2010-10-26 11:45:46

+0

试试这个:http://forums.asp.net/p/1305766/2558955.aspx :) – Onkelborg 2010-10-26 11:48:25

+0

谢谢,但它描述了一个类似的问题与不同的原因 - 他们重复ID,所以后缀被自动生成(在Asp.Net 2的外观也是如此)。我有一个在Asp.Net 2中工作的页面,但是在4中,相同的代码(重新编译)现在在客户端ID后面加了'_0',我希望它像以前那样运行。 – Keith 2010-10-26 11:54:15