【问题标题】:How to use the <label> tag in ASP.NET?如何在 ASP.NET 中使用 <label> 标签?
【发布时间】:2010-10-04 08:59:53
【问题描述】:

如何在 ASP.NET 应用程序中使用 &lt;label&gt; 标记?我希望它是有效的、可访问的和可用的。

我理解最佳的 HTML 方式是这样的:

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

但是如果上面的代码在 ASP.NET 用户控件中,输入 ID 会改变,这意味着标签的“for”属性是没有用的。我可以将标签标签设置为服务器控件并在代码中设置其“for”属性(Username.ClientID),但对于这么简单的事情似乎需要做很多工作。

我以前也看到过这个 HTML:

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

什么是正确的方法?

【问题讨论】:

    标签: asp.net html usability label


    【解决方案1】:

    我为此使用&lt;asp:Label ... AssociatedControlID="Username" ...&gt; 控件。它们被呈现为&lt;label&gt; 标签并适当地设置for 属性。

    请注意,如果您愿意,您还可以在 Label 控件中嵌套其他标签:

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

    【讨论】:

    • 我也使用这种方法,但总是为标签标签设置 EnableViewState="False",特别是当它是一个实体形式时。在我看来,视图状态越小越好。见stackoverflow.com/questions/113479/…
    • 同意。为简洁起见,它被省略了。
    • 我发现在 Web.Config 页面设置中关闭 ViewState 并仅打开您需要的控件更容易。是的,如果您只为所有控件保持打开状态,ViewState 确实会增加并减慢速度。
    • 你也要小心。可能你想要一个
    • 如果 asp:Label 控件具有 AssociatedControlID,它将正确呈现
    【解决方案2】:

    你也可以这样写:

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

    Phil Haack 有一个关于此主题的 blog post

    【讨论】:

    • OP 在问题中说他们已经知道他们可以做到这一点。
    【解决方案3】:

    使用&lt;asp:Label&gt; 服务器控件。它有一个属性,您可以使用它来设置关联的控件 ID。

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

    【讨论】:

      【解决方案4】:

      我想最简单的方法就是这样。

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

      【讨论】:

        【解决方案5】:

        如果您想要一个标签,但在AssociatedControlID 中没有其他控件可使用,则可以使用标签本身

        <asp:Label ID="Not_Span" AssociatedControlID="Not_Span" Text="Will be rendered as label" />
        

        【讨论】:

          【解决方案6】:

          如果您使用的是 .NET 4,您现在可以使用 ClientIDMode 属性来配置一个或多个控件以使用静态或可预测的 ID。 ClientIDMode 属性可以直接在 TextBox 上设置,也可以在任何父控件或包含页面上设置。

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

          MSDN 上阅读有关 ClientIDMode 的更多信息

          【讨论】:

            【解决方案7】:
            <p><asp:Label ID="label1"           Text="Username:"           AssociatedControlID="txtUserName"           runat="server">    <asp:TextBox ID="txtUserName" runat="server" /></asp:Label></p>
            

            【讨论】:

              【解决方案8】:

              你我也试试这个:

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

              如果您拖放标签,这就是 Visual Studio 或任何其他软件为您提供的。

              【讨论】:

                猜你喜欢
                • 2017-09-19
                • 1970-01-01
                • 2015-02-05
                • 1970-01-01
                • 2011-03-30
                • 1970-01-01
                • 2011-02-11
                • 2019-09-12
                • 1970-01-01
                相关资源
                最近更新 更多