Подтвердить что ты не робот

Понимание атрибута сервера runat

Я действительно новичок в ASP.NET. Я просто проверял веб-приложение ASP.NET по умолчанию. Он поставляется по умолчанию с несколькими страницами (Default.aspx, About.aspx и т.д.).

Я заметил, что файл Site.master - это файл, в котором я создаю основной макет для моих страниц. Но я также заметил, что тег head имеет атрибут runat="server".

Я знаю, что этот тег используется в тегах <asp:XXX>, но почему в теге <head>???

Кроме того, когда я удаляю этот атрибут, все стили удаляются с веб-страницы. Таким образом, он что-то делает. Я просто не понимаю, что именно он делает...

Так почему он там, на HTML-теге...??? Я не вижу там никакого кода, который должен быть запущен на сервере...

<head runat="server">
    <title>Hallo</title>
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />

    <!-- This part is run on the server. So why does the head tag
         also need a runat=server ?? -->
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>
4b9b3361

Ответ 1

Элемент head содержит атрибут runat="server", который указывает, что это серверный элемент управления (а не статический HTML). Все страницы ASP.NET происходят из класса Page, который находится в пространстве имен System.Web.UI. Этот класс содержит свойство заголовка, которое обеспечивает доступ к области страницы. Используя свойство Header, мы можем установить заголовок страницы ASP.NET или добавить дополнительную разметку в обработанный раздел. Таким образом, можно настроить элемент страницы содержимого, написав бит кода в обработчике событий Page_Load.

' Programmatically add a <meta> element to the Header

Dim keywords As New HtmlMeta()
keywords.Name = "keywords"
keywords.Content = "master page,asp.net,tutorial"
Page.Header.Controls.Add(keywords)

Подробнее см. Задание метатегов в ASP.NET с помощью VB.NET.

Ответ 2

Вы спрашивали, почему стили больше не применяются при удалении runat="server" из элемента <head>.

Это просто: при запуске на стороне сервера, парсер заменит ~/ из объявления стилей <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> корневым путем приложения.

~ является незаконным в URL-адресе. Таким образом, если это не заменяется синтаксическим анализатором, файл не будет найден, поэтому таблица стилей не будет применяться.

О, btw, установка атрибута runat="server" в элементе <head> заставит все его подэлементы запускаться на сервере, поэтому элемент <link> запускается на сервере.

Ответ 3

Атрибут runat в основном сообщает ASP.Net, что ему необходимо проанализировать элемент, его атрибуты и его содержимое как серверный элемент управления. Включить код на сервере, который будет выполнен для настройки ответа.

Без него никакие дочерние элементы управления, содержащиеся в разделе <head>, не будут обрабатываться. Таким образом, любой динамический head er, включая манипуляции с заголовками или любые другие серверные элементы управления, не будет интерпретироваться.

Ответ 4

Тег runat = "server" в ASP.NET позволяет конвертировать/обрабатывать большинство элементов HTML как серверный элемент управления, который можно манипулировать с помощью кода во время генерации. Некоторые элементы управления имеют явные реализации, другие просто возвращаются к общей реализации управления.