ASP.NET 2.5前缀为ctl00,ASP.NET 4不为ctl00加前缀

时间:2010-12-14 09:38:06

标签: asp.net

有谁知道为什么ASP.NET 4在ASP控件上删除了ctl00前缀?

我错过了一个设置吗?

4 个答案:

答案 0 :(得分:29)

在ASP.NET 4.0中,他们引入了对更清晰的HTML语法的支持。你可以阅读它at Scott Gu's blog。如果您需要客户端ID的经典模型,可以调整web.config:

<configuration>
    <system.web>
        <pages controlRenderingCompatibilityVersion="3.5" />

这将使您的应用程序升级更容易。您可以使用Control.ClientIDMode属性在每个控件(和每页)中更改此属性,该属性也可以在Web配置中设置:

<configuration>
    <system.web>
        <pages clientIDMode="AutoID|Predictable|Static|Inherit" />

AutoID使用经典的ASP.NET 2.0模型呈现控件。

答案 1 :(得分:1)

据我记得,它决定使用ASP.NET来决定使用哪个前缀。 使用硬编码的id值引用控件是一种不好的做法。

您应该使用ClientId属性,该属性将始终为您生成正确的ID:

<td class="tmarg10" style="width: 150px">
    <label for="<%=txtName.ClientID %>">
        Name of the mall group :</label>
</td>
<td class="tmarg10">
    <asp:TextBox ID="txtName" runat="server" Columns="90" /> <br />
</td>

在上面的示例中,它计算文本框的正确ID并将其放入label属性中。通过这种方式,您将不再担心保持控件的相同ID。

答案 2 :(得分:0)

不是设置,而是MS决定简化容器内控件的ID转换为客户端的方式。

以下是Scott Guthrie解释变化的blog post。背后的原因:

  

清洁,基于标准,CSS友好标记

答案 3 :(得分:0)

如果您只想在控件的ID中添加“ct100”前缀,请将Master页面添加到WebPage。但是如上所述,尽量避免在源代码中使用带有控件ID的硬编码,并阅读Metthew对生成自定义ID的注释