2014-02-10 49 views
2

我有一个简单的asp.net页面,带有一个asp.net链接按钮和asp.net内容标签,它指向一个带有asp.net内容占位符和表单标签的简单asp.net母版页。下面是这两个项目的代码:什么时候添加了ctl00前缀?

的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> 

出于某种原因,当我们在一台服务器的ID上运行这个简单的Web应用程序链接bhutton得到的是MainContent_LinkBut​​ton1 ,当我们在另一台服务器上运行此应用时,链接按钮获得的id是_ctl0_MainContent_LinkBut​​ton1

Doese有人有一个idia为什么我们得到前缀ctl0在一个特定的服务器和另一个服务器我们不明白吗?

回答

4

这是ASP.Net Web窗体的默认行为,因为HTML中的id必须是唯一的。有时ASP.Net必须根据其父控件动态更改ID。你可以从这里阅读更多http://msdn.microsoft.com/en-us/library/1d04y8ss(v=vs.100).ASPX

通常你不必担心这个ID。但是,如果你需要,例如客户端的ID写入需要找到其ID的元素javascript函数,你可以使用客户端Id属性获取控件的ID:

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

</script> 
+0

好的答案,我的个人偏好是从持有ClientIDs的代码注册一个JS对象,我不喜欢<%= %>语法,但各自为己! – Liath

+0

谢谢,这个答案很有帮助。我已阅读您发送的链接。这并不能解释为什么在某些服务器上我得到前缀,而在其他服务器(相同的操作系统,相同的IIS,甚至使用相同的数据库)中,我没有得到这个前缀。 –

3

我当我从.Net 3.5迁移到.Net 4.0时出现同样的问题。我通过在IIS6的web.config中添加以下配置来解决此问题。对于IIS7,使用system.webServer部分:

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

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

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

相关问题