何时添加ctl00前缀?

5

我有一个简单的asp.net页面,其中包含一个asp.net链接按钮和一个指向简单asp.net主页的asp.net内容标签,该主页具有一个asp.net内容占位符和一个表单标签。以下是这两个项目的代码:

Site.Master:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebApplication1.SiteMaster" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <form runat="server">
            <asp:ContentPlaceHolder ID="MainContent" runat="server"/>
    </form>
</body>
</html>

Default.aspx:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
</asp:Content>

由于某些原因,当我们在一个服务器上运行这个简单的Web应用程序时,链接按钮的ID为MainContent_LinkButton1,而当我们在另一个服务器上运行此应用程序时,链接按钮的ID为_ctl0_MainContent_LinkButton1。

有人知道为什么在某个特定的服务器上会出现前缀“ctl0”,而在另一个服务器上却没有吗?

4个回答

7

当我从.Net 3.5迁移到.Net 4.0时,我遇到了同样的问题。

我通过在IIS6的web.config中添加以下配置来解决它。对于IIS7,请使用system.webServer部分:

<system.web> 
  <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>

5
这是ASP.Net Web表单的默认行为,因为HTML中的ID必须是唯一的。有时,ASP.Net必须根据其父控件动态更改ID。您可以从此处阅读更多信息:http://msdn.microsoft.com/en-us/library/1d04y8ss(v=vs.100).ASPX 通常情况下,您不必担心此ID。但是,如果您需要客户端的ID,例如编写需要按其ID查找元素的JavaScript函数,则可以使用ClientId属性获取控件的ID:
<script type="text/javascript">
      function Test() {
          var myControl = document.getElementById('<%= myControl.ClientId %>');
      }

</script>

很棒的回答,我的个人偏好是从代码后台注册一个JS对象来保存ClientIDs,我不喜欢<%= %>语法,但每个人有自己的喜好! - Liath
谢谢,这个答案很有帮助。我已经阅读了你发送的链接。但它并没有解释为什么在一些服务器上我会得到前缀,而在其他服务器上(相同的操作系统,相同的IIS,甚至使用相同的数据库)我却没有得到这个前缀。 - omer schleifer

1
<pages **controlRenderingCompatibilityVersion="4.0"** clientIDMode="AutoID"   >
如果您在web.config中将controlRenderingCompatibilityVersion设置为“4.0”,则会得到“ctl00”。要删除此前缀,可以将其设置为3.5或更早版本。

1

只需要修改

clientIDMode="AutoID" 

clientIDMode="Static"

在Webconfig的页面标签中。 它完美地工作了。由于这个设置,ctl00被添加了前缀。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接