Закрывающий тег ASP.NET

Когда я использую автозаполнение в VisualStudio 2010 в моем приложении .aspx, в закрывающих тегах управления есть разные пополнения по умолчанию:

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

Есть ли объяснение этого поведения?

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

Не будет недопустимым.

Ответ 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, почему на том, который мы предпочитаем выписывать стороне... Посмотрите на этот пример, на ярлык или на другие аналогичные элементы управления, текст, который мы, возможно, придется писать, может включать символы, которые недопустимы внутри текстового свойства, возможно, сложный стиль 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" 
    />

В конечном итоге это решение, которое делает make - возможно, нам нужно задать им настоящую реальную причину.

Теперь это также не компилируется

<asp:CheckBox runat="server" ID="cbMyChbx">one<asp:CheckBox>
Флажок

когда отображается на странице, использует два элемента управления, один вход и одну метку, поэтому они, возможно, должны помочь пользователю понять, что текст не поступает в элемент управления ввода.

Ответ 2

Это связано с тем, что элемент управления ASP.NET Label украшен ParseChildrenAttribute с ParseChildren(false), а CheckBox - нет.

Вы можете поддерживать то же поведение с вашими настраиваемыми элементами управления, например, со следующим кодом, Visual Studio будет вести себя как Label, если вы используете MyControl в редакторе веб-форм:

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

Ответ 3

<asp:CheckBox /> Поскольку элемент не имеет содержимого, вы можете закрыть тег с помощью /" > вместо отдельного закрывающего тега

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

Отображает статический текст на странице веб-форм и позволяет вам манипулировать им программно.

Подробнее об этом Управление веб-сервером

Ответ 4

Все приведенные выше ответы действительны, но что-то дополнительное. Все элементы управления 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 Label отображается как диапазон и не соответствует стандартам XHTML. Надеюсь, это ясно, всегда думайте о том, как это будет сделано, и ASP пытается придерживаться того, что в конечном итоге будет оказано.

веселит