2009-01-29 10 views
42

Was ist der beste Weg, um das <label>-Tag in einer ASP.NET-Anwendung zu verwenden? Ich möchte, dass es XHTML-gültig, zugänglich und nutzbar ist.HTML-Label-Tag und ASP.NET

Ich verstehe die optimale Möglichkeit, dies ist:

<label for="Username">Username:</label> 
<input type="text" id="Username" runat="server" /> 

Aber wenn der obige Code in einer ASP.NET-Benutzersteuerung ist, wird der Eingang ID, ändern Sie das Attribut „for“ ist nutzlos Label bedeutet. Ich könnte das Label-Tag zu einem Server-Steuerelement machen und sein "for" -Attribut im Code (Username.ClientID) setzen, aber es scheint so viel Arbeit für so eine einfache Sache zu sein.

ich diesen HTML auch in der Vergangenheit gesehen haben:

<label> 
    <span>Username</span> 
    <input type="text" id="Username" runat="server" /> 
</label> 

Was die optimale Ansatz ist?

Antwort

61

Ich verwende <asp:Label ... AssociatedControlID="Username" ...> Kontrollen dafür. Sie werden als <label> Tags gerendert und das Attribut for entsprechend gesetzt.

Beachten Sie, dass Sie können auch Nest andere Tags innerhalb der Label-Steuerelement, wenn Sie möchten:

<asp:Label ID="UsernameLabel" 
      Text="Username:" 
      AssociatedControlID="UsernameTextBox" 
      runat="server"> 
    <asp:TextBox ID="UsernameTextBox" runat="server" /> 
</asp:Label> 
+5

Auch ich benutze diesen Ansatz, aber immer EnableViewState = "False" für das Label-Tag, vor allem, wenn es eine wesentliche Form ist. Je kleiner der Viewstate, desto besser ist meiner Meinung nach. Siehe http://stackoverflow.com/questions/113479/when-to-enable-disable-viewstate –

+0

Einverstanden. Es wurde der Kürze halber weggelassen. –

+2

Ich finde es einfacher, ViewState in den Web.Config-Seiteneinstellungen auszuschalten und es nur für die Steuerelemente einzuschalten, für die Sie es brauchen. Ja, ViewState summiert sich wirklich und verlangsamt die Dinge, wenn Sie es nur für alle Steuerelemente eingeschaltet lassen. –

8

die <asp:Label> Steuerungsserver verwenden. Es verfügt über eine Eigenschaft, mit der Sie die zugeordnete Steuerelement-ID festlegen können.

<asp:Label ID="label1" runat="server" Text="Username" AssociatedControlID="Text1" /> 
<asp:TextBox ID="Text1" runat="server" /> 
6

Ich denke, der einfachste Weg ist es, dies zu tun.

<asp:Label AssociatedControlID="Username" runat="server" Text="Username:"></asp:Label> 
<asp:TextBox ID="Username" runat="server"></asp:TextBox> 

EDIT: Wow .. alle gleichen Antworten innerhalb einer Minute. =)

0
<p><asp:Label ID="label1"   Text="Username:"   AssociatedControlID="txtUserName"   runat="server"> <asp:TextBox ID="txtUserName" runat="server" /></asp:Label></p> 
16

Sie können schreiben, es auch so:

<label for="<%= Username.ClientID %>">Username:</label> 
<asp:TextBox ID="Username" runat="server" /> 

Phil Haack eine blog post zu diesem Thema hat

3

Wenn Sie .NET 4 verwenden können Sie jetzt die ClientIDMode Eigenschaft Konfigurieren eines oder mehrerer Steuerelemente für die Verwendung statischer oder vorhersagbarer IDs Die ClientIDMode-Eigenschaft kann direkt in der TextBox festgelegt werden, oder Sie können sie auf einem übergeordneten Steuerelement oder der enthaltenden Seite festlegen.

<label for="Username">Username:</label> 
<asp:TextBox ID="Username" runat="server" ClientIDMode="Static" /> 

Lesen Sie mehr über die ClientIDMode auf MSDN

3

Wenn Sie ein Label wollen, aber nicht über ein anderes Steuerelement in AssociatedControlID ein verwenden, um das Etikett selbst

0

Sie verwenden meine auch versuchen und das:

<asp:Label ID="Label1" runat="server" Text="label"></asp:Label> 

Dies ist, was Visual Stud io oder eine andere Software bietet Ihnen, wenn Sie ein Etikett ziehen und ablegen.