2014-02-10 66 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或更低版本。

相關問題