2010-10-01 47 views
4

當我創建一個表單時,我嘗試將輔助功能放在首要位置,但asp.net的輸出取消了其中的一部分。例如,當我設置一個標籤,標籤的輸入標籤,我創建一個這樣的:當輸出到HTML時,是否有一種方法可以讓我爲asp .net控件設置ID?

<label for="frmFirstName">First Name<span class="required">*</span></label> 
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" /> 

但是,當HTML是從頁面的輸出,其輸出爲:

<label for="frmFirstName">First Name<span class="required">*</span></label> 
<input name="ctl00$phMainContent$frmFirstName" type="text" id="ctl00_phMainContent_frmFirstName" class="textbox" /> 

這是一個問題,因爲現在標籤不再綁定到輸入元素。有沒有辦法強制.NET輸出確切我爲輸入字段設置的ID?我不應該使用Javascript來糾正這樣的事情。

回答

4

使用asp:Label元素並將其AssociatedControlId屬性指向您的文本框。

<asp:Label ID="lblFirstName" runat="server" AssociatedControlId="frmFirstName">First Name<span class="required">*</span></asp:Label> 
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" /> 

這應該爲您輸出正確的HTML。

+0

」創建了一個「」標籤,該標籤不正確。它需要是「

+2

通常,'Label'發出'span',但是如果添加AssociatedControlID屬性,它會在HTML中呈現'label'元素。 – 2010-10-01 20:25:47

+1

哇。那麼,whaddaya知道......謝謝。這非常有幫助。 – Adam 2010-10-01 20:35:44

3

您可以使用ClientId屬性。這將是什麼在HTML控件的ID輸出,哪些是你可以使用客戶端引用渲染元素:

<label for="<%:frmFirstName.ClientId%>">First Name<span class="required">*</span></label> 
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server"/

注:

<%:%>是新與ASP.NET 4.0 - 你需要如果在.NET 3.5及之前使用<%=%>

編輯:

只是爲了添加ClientId引用是從Javascript控制時要走的路。

+0

感謝您的快速響應。我會試試這個。 – Adam 2010-10-01 20:17:12

+0

再次感謝。這種方法雖然有點骯髒,但卻適用於我需要做的事情。 – Adam 2010-10-01 20:30:09

+0

@Adam - 這是ASP.NET如何工作以及爲什麼存在「ClientID」。是的,它看起來不太好,但這就是webforms。如果你想清理標記,你可能想查看ASP.NET MVC。 – Oded 2010-10-01 20:32:23

6

如果使用ASP.Net 4,則可以將控件的ClientIDMode屬性設置爲static。這將使它在渲染時保持ID標籤的值。

+0

不幸的是,我們公司使用的CMS仍然設置爲2.0,並且他們不想更新服務器。 – Adam 2010-10-01 20:29:25

0

除了AssociatedControlId和<%= control.ClientId%>解決方案,如果您的控件(本例中爲「frmFirstName」)保證是頁面上唯一具有該ID的控件,則可以設置將控件的ClientIDMode屬性設置爲「Static」,這意味着ASP.NET不會渲染呈現的HTML中的ID。

例如:

<label for="frmFirstName" runat="server" ID="lblFirstName">First Name</label> 
<asp:TextBox runat="server" ID="frmFirstName" ClientIDMode="Static" /> 

將呈現爲

<label for="frmFirstName" id="some$aspnet$id$lblFirstName">First Name</label> 
<input type="text" id="frmFirstName" /> 

這也將使它更容易,如果你碰巧需要從Javascript引用它,因爲它可以呈現一個痛苦在Javascript中的ASP.NET自動ID(據我所知,不可能在一個單獨的.js文件中做,你需要在頁面上嵌入JS並使用<%= control.ClientID%>)。

查看更多about ClientIDMode here:http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

相關問題