我有一个带有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_LinkButton1 当我们在另一台服务器上运行此应用程序时,链接按钮获取的id是_ctl0_MainContent_LinkButton1
Doese有人为什么我们在特定服务器上获得前缀 ctl0 而在另一台服务器中我们没有得到它?
答案 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