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