什么时候添加了ctl00前缀?

时间:2014-02-10 13:12:08

标签: html asp.net

我有一个带有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应用程序时,链接bhutton获取的ID是MainContent_LinkBut​​ton1 当我们在另一台服务器上运行此应用程序时,链接按钮获取的id是_ctl0_MainContent_LinkBut​​ton1

Doese有人为什么我们在特定服务器上获得前缀 ctl0 而在另一台服务器中我们没有得到它?

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分: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-property来获取控件的Id:

<script type="text/javascript">
      function Test() {
          var myControl = document.getElementById('<%= myControl.ClientId %>');
      }

</script>

答案 2 :(得分:1)

<pages **controlRenderingCompatibilityVersion="4.0"** clientIDMode="AutoID"   >

如果在web.config中将controlRenderingCompatibilityVersion设置为版本“4.0”,则会获得'ctl00'。要删除此前缀,您可以将其设置为3.5或更早。

答案 3 :(得分:0)

只需更改

clientIDMode="AutoID" 

clientIDMode="Static"

在Webconfig的 page 标签中。 它运作完美。 ctl00以该设置的前缀b / c