Почему я должен указывать runat="server"
на всех моих элементах управления ASP.NET, когда это обязательный атрибут и server
является единственным вариантом, доступным в моих ограниченных знаниях ASP.NET, и я получаю сообщение об ошибке, если я его не использую?
Я понимаю, что могу по желанию использовать его в своих тегах HTML, и я понимаю парадигму клиент / сервер и то, что она на самом деле указывает.
Является ли это избыточным тегом, который может просто подразумеваться элементом управления, являющимся элементом управления ASP.NET, или есть основная причина?
asp.net
runatserver
JohnC
источник
источник
Web.config
, в качестве подходящего обходного пути. Во время процесса анализа атрибуты по умолчанию могут быть введены в DOM, где это необходимо. Я собираюсь поиграть с этой идеей ...Ответы:
Я всегда полагал, что это было больше для понимания того, что вы можете смешивать теги ASP.NET и теги HTML, а теги HTML могут быть
runat="server"
или нет. Ничего не мешает оставить тег внутри, и это вызывает ошибку компилятора, чтобы убрать его. Чем больше вещей вы подразумеваете о веб-языке, тем легче начинающему программисту прийти и изучить его. Это такая же веская причина, как и любая, быть многословной об атрибутах тега.Этот разговор велся в блоге Майка Шинкеля между ним и Тэлботом Кроуэлл из Microsoft National Services. Соответствующая информация ниже (первый абзац перефразирован из-за грамматических ошибок в источнике):
Это продолжается:
Он продолжает:
источник
Я обычно не люблю догадываться, но я собираюсь на этом ...
Если вы помните, что в то время (в 2001 году?) Маркетинговый шумиха по .NET от Microsoft было трудно сказать, что такое .NET. Был ли это сервер? платформа программирования? язык? что-то новое полностью? Учитывая рекламу, это было двусмысленно все, что вы хотели, это просто решило любую проблему, которая могла у вас возникнуть.
Итак, я предполагаю, что было скрытое великое видение, что код ASP.NET может выполняться где угодно - на стороне сервера или на стороне клиента, в копии Internet Explorer, привязанной к среде выполнения .NET. runat = "server" - это просто рудиментарный остаток, оставленный позади, потому что его клиентский эквивалент никогда не попадал в производство.
Помните эти странные объявления?
Связанный: Статья от Регистра с некоторой историей .NET.
источник
Не все элементы управления, которые могут быть включены в страницу, должны быть запущены на сервере. Например:
<INPUT type="submit" runat=server />
По сути это то же самое, что и:
<asp:Button runat=server />
Удалите тег runat = server из первого, и у вас появится стандартная кнопка HTML, которая запускается в браузере. Существуют причины для и против запуска определенного элемента управления на сервере, и у ASP.NET нет способа «принять» то, что вы хотите, основываясь на разметке HTML, которую вы включаете. Можно было бы «вывести» сервер runat = для
<asp:XXX />
семейства элементов управления, но я полагаю, что Microsoft посчитает это ударом по синтаксису разметки и движку ASP.NET.источник
Статья Microsoft Msdn . Забытые элементы управления: HTML-элементы управления сервером объясняют использование runat = "server" с примером для текстового поля
<input type="text">
путем преобразования его в<input type="text" id="Textbox1" runat="server">
Короче говоря, чтобы включить программный доступ к элементу HTML, добавьте
runat="server"
к нему.источник
Я подозреваю, что это связано с тем, как серверные элементы управления идентифицируются во время обработки. Вместо того, чтобы проверять каждый элемент управления во время выполнения по имени, чтобы определить, нужно ли выполнять обработку на стороне сервера, он делает выбор во внутреннем представлении узла по тегу. Компилятор проверяет, чтобы убедиться, что все элементы управления, которые требуют теги сервера, имеют их на этапе проверки.
источник
Элементы HTML в файлах ASP.NET по умолчанию считаются текстовыми. Чтобы сделать эти элементы программируемыми, добавьте
runat="server"
атрибут к элементу HTML. Этот атрибут указывает, что элемент должен рассматриваться как серверный элемент управления.источник
Это происходит потому, что все элементы управления в ASP .NET наследуются от System.Web.UI.Control, который имеет атрибут «runat».
в классе System.Web.UI.HTMLControl этот атрибут не требуется, однако в классе System.Web.UI.WebControl этот атрибут является обязательным.
редактировать: позвольте мне быть более конкретным. Поскольку asp.net является в значительной степени абстрактным HTML, компилятору нужна какая-то директива, чтобы он знал, что конкретный тег должен выполняться на стороне сервера. если бы этого атрибута там не было, то он не знал бы, что сначала обработать его на сервере. если его там нет, он предполагает, что это обычная разметка и передает ее клиенту.
источник
Я думаю, что Microsoft может исправить эту неоднозначность, заставив компилятор добавить атрибут runat до того, как страница когда-либо будет скомпилирована, что-то наподобие вещи типа стирания, которую имеет java с родовыми типами, вместо стирания, она могла бы писать runat = server везде, где она видит asp: префикс для тегов, поэтому разработчику не нужно беспокоиться об этом.
источник
Если вы используете его в обычных HTML-тегах, это означает, что вы можете программно манипулировать ими в обработчиках событий и т. Д., Например, изменять href или класс якорного тега при загрузке страницы ... делайте это только при необходимости, потому что ванильные HTML-теги идти быстрее.
Что касается пользовательских элементов управления и серверных элементов управления, то нет, они просто не будут работать без них, не углубившись во внутренности препроцессора aspx, не могли точно сказать, почему, но предположили бы, что по вполне понятным причинам они просто написали синтаксический анализатор таким образом, ищет вещи, явно помеченные как «сделать что-то».
Если @JonSkeet где-то рядом, он, вероятно, сможет дать гораздо лучший ответ.
источник
При отправке данных на веб-сервер ASP.NET элементы управления, упомянутые как Runat = «server», будут представлены как объекты Dot Net в серверном приложении. Вы можете вручную ввести код в элементах управления HTML или использовать параметр « Запуск от имени сервера », щелкнув правой кнопкой мыши в режиме конструктора. Элементы управления ASP.NET автоматически получат этот атрибут, как только вы перетащите его из панели инструментов, где обычно нет элементов управления HTML.
источник
Довольно избыточный атрибут, учитывая, что тег «asp», очевидно, является элементом ASP, и его должно быть достаточно, чтобы идентифицировать его как доступный элемент на стороне сервера.
Однако в других местах он используется для повышения нормальных тегов, которые будут использоваться в коде позади.
источник
Я просто пришел к такому выводу методом проб и ошибок: runat = "server" необходим для доступа к элементам во время выполнения на стороне сервера. Удалите их, перекомпилируйте и посмотрите, что произойдет.
источник
runat="Server"
указывает на обратную передачу на сервер для HTML-элемента управления.Веб-формы
postback
постоянно используются для подачи сигнала серверу на обработку события управления страницей..NET
MVC
страницы НЕ используютpostback
(кроме формы"submit"
).MVC
полагается наJQUERY
управление страницей на стороне клиента (таким образом, обходя необходимость в большом количествеpostback
сообщений на сервер).Итак:
.NET
веб-формы ... много использовать"runat"
атрибут в разметке страницы..NET
MVC
вряд ли когда-либо использует"runat"
атрибут в разметке страницы.Надеюсь, это поможет уточнить, почему
runat
это необходимо ...источник