【问题标题】:ASP.NET closing tagASP.NET 结束标记
【发布时间】:2016-10-15 00:12:03
【问题描述】:

当我在 .aspx 应用程序中使用 VisualStudio 2010 中的自动补全功能时,关闭控制标签时会出现不同的默认补全:

<asp:CheckBox /> 
<asp:Label></asp:Label>

对这种行为有解释吗?

<asp:CheckBox></asp:CheckBox>
<asp:Label />

不会无效。

【问题讨论】:

    标签: asp.net visual-studio webforms


    【解决方案1】:

    标签关闭是这样的

    <asp:Label runat="server"></asp:Label>
    

    因为我们通常在

    之间输入一些东西
    <asp:Label runat="server" ID="lblOne">better start programming now</asp:Label>
    

    复选框不是这样,我们在里面输入

    <asp:CheckBox runat="server" Text="enable" ID="cbOne" />
    

    我们在两个元素上都有Text 字段,为什么在一个我们更喜欢写在一边...看这个例子,在标签上,或者在其他类似的控件上,我们可能必须写的文本可能包括Text 属性中不允许使用的字符,可能是复杂的 css 样式或其他任何内容......另一侧的复选框仅包含一个小文本(是的,不是,类似的)

    <asp:Label ID="lblLabel" runat="server">
        This is a <b>"label"</b>
        <br />And one more line
    </asp:Label>
    
    and more example that compiles
    
    <asp:Label ID="lblLabel" runat="server">
        This is a <b>"label"</b>
        <br />And one more line
        <asp:Literal runat="server" ID="ltrOneMore">One more Control Inside</asp:Literal>
    </asp:Label>
    
    
    ---but this is not compile--
    
    <asp:Label ID="lblLabel2" runat="server" 
        Text="This is a <b>"label"</b>
        <br /> and one more line" 
        />
    

    最后是制造商做出的决定——也许我们需要询问他们真正的原因。

    现在这也不编译

    <asp:CheckBox runat="server" ID="cbMyChbx">one<asp:CheckBox>
    

    在页面上渲染时的复选框使用两个控件,一个输入和一个标签,因此他们可能需要帮助用户了解文本不在输入控件上。

    【讨论】:

    • something between 也是存在于asp:CheckBox 的文本属性
    • 这个答案解释了例如GridViewPanel 因为您必须在其中编写其他控件。对于Label,你也可以写&lt;asp:Label runat="server" ID="lblOne" Text="better start programming" /&gt;,正如 Senthil Natarajan 提到的那样
    • @Shneeg 可以,但是在标签或文字中,您可能需要输入一些 html 控件(例如,粗体、斜体),然后将它们写在外面。 [ParseChildren(false)] 是您进行编程的方式,而不是您将其设置为 true 或 false 的原因。我现在做一个小更新
    【解决方案2】:

    以上所有答案都是有效的,但还有一些额外的东西。所有的 asp 控件最终都呈现为 HTML 控件,这也定义了 asp 控件的行为方式。例如标签中的文本不必总是设置为

    <asp:Label runat="server" ID="lblOne">better start programming now</asp:Label>
    

    也可以这样做

    <asp:Label runat="server" ID="lblOne" Text="better start programming"></asp:Label>
    

    现在两者都是正确的格式,所以说任何需要内容的控件都有一个单独的结束标记是无效的。它还取决于它在 HTML 中的呈现方式。例如,默认情况下,asp 标签呈现为跨度并且不符合 XHTML 标准。希望这说明清楚,始终考虑将如何呈现它,并且 ASP 会尝试遵守最终将呈现的内容。

    干杯

    【讨论】:

    • &lt;asp:Label runat="server" ID="lblOne" Text="better start programming"&gt;better start programming now&lt;/asp:Label&gt;怎么样
    • 你的问题是什么?
    • 不能同时使用,为什么还要选择呢?
    【解决方案3】:

    这是因为 ASP.NET 的 Label 控件用 ParseChildrenAttribute 装饰,ParseChildren(false) 不是 CheckBox

    您可以支持与自定义控件相同的行为,例如,使用以下代码,如果您在 Web 表单编辑器中使用 MyControl,Visual Studio 的行为将类似于 Label:

    [ParseChildren(false)]
    public class MyControl : WebControl
    {
        ...
    }
    

    【讨论】:

      【解决方案4】:

      &lt;asp:CheckBox /&gt; 因为元素没有内容,所以可以用 /> 关闭标签,而不是使用单独的关闭标签

       <asp:Label></asp:Label> or <asp:Label /> 
      

      在 Web 表单页面上显示静态文本并允许您以编程方式对其进行操作

      了解更多信息Web Server Control

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 2013-03-11
        相关资源
        最近更新 更多