Почему так происходит ASP.NET webforms нужен атрибут Runat="Server"?



почему я должен указать runat="server" на все мои ASP.NET управляет, когда это обязательный атрибут и server это единственный вариант, доступный в моих ограниченных знаниях ASP.NET, и я получаю ошибку, если я не использую его?



Я понимаю, что я могу дополнительно использовать его в своих HTML-тегах, и я понимаю парадигму клиент/сервер и то, что она фактически указывает.



является ли это избыточным тегом, который может просто подразумеваться тем, что элемент управления является ASP.NET контроль, или есть есть подоплека?

676   13  

13 ответов:

Я всегда считал, что это было больше для понимания, что вы можете смешивать ASP.NET теги и HTML-теги, а также HTML-теги имеют возможность быть runat="server" или нет. Это не повредит ничего, чтобы оставить тег, и это вызывает ошибку компилятора, чтобы взять его. Чем больше вы подразумеваете о веб-языке, тем труднее для начинающего программиста прийти и изучить его. Это такая же хорошая причина, как и любая, чтобы быть подробным об атрибутах тегов.

этот разговор был имел на Майка Шинкеля блог между ним и Талботом Кроуэллом из Microsoft National Services. Соответствующая информация приведена ниже (первый абзац перефразирован из-за грамматических ошибок в источнике):

[...] но важность <runat="server"> больше для согласованности и расширяемости.

если разработчик должен отметить некоторые теги (то есть. <asp: />) для ASP.NET двигатель игнорировать, то есть также потенциальная проблема конфликты пространств имен между тегами и будущими улучшениями. Требуя или "<%" префикс или ИКБ "<!– #include...(...) Кроме того, поскольку ASP.NET предназначен для разрешить разделение веб-дизайнеров (foo.aspx) от веб-разработчиков (foo.aspx.vb), веб-дизайнеры могут используйте свои собственные инструменты веб-дизайнера поместите HTML и JavaScript на стороне клиента без необходимости знать об этом ASP.NET конкретные теги или атрибуты.

Я обычно не люблю гадать, но я иду на это...

Если вы помните рекламную шумиху Microsoft .NET в тот же день (2001?), трудно было даже сказать, что такое .NET. Это был сервер? программная платформа? язык? что-то совершенно новое? Учитывая рекламу, это было двусмысленно все, что вы хотели, чтобы это было - это просто решило любую проблему, которую вы могли бы иметь.

Итак, я предполагаю, что было скрытое великое видение, которое ASP.NET код может работать в любом месте-сервер сторона или клиентская сторона, в копии Internet Explorer, привязанной к среде выполнения .NET. runat= "сервер" -это просто рудиментарный остаток, оставленный позади, потому что его эквивалент на стороне клиента никогда не добирался до производства.

помните эти странные объявления?

по теме: статья из реестра С некоторой историей .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 на сервер перед созданием веб-страницы и ее отправкой клиенту. Элемент HTML должен содержать атрибут id. Этот атрибут служит в качестве идентификатора для элемента и позволяет запрограммировать элементы по их конкретным идентификаторам. В дополнение к этому атрибуту, элемент HTML должен содержать runat= "сервер". Это говорит серверу обработки, что тег обрабатывается на сервере и не считается традиционный элемент HTML.

короче говоря, чтобы включить программный доступ к элементу HTML добавить runat="server" к нему.

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

HTML элементы в ASP.NET файлы по умолчанию обрабатываются как текст. Чтобы сделать эти элементы программируемыми, добавьте runat="server" атрибут к элементу HTML. Этот атрибут указывает, что элемент должен рассматриваться как серверный элемент управления.

Это там, потому что все элементы управления в ASP .NET наследуют от системы.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Элемент управления, который имеет атрибут "runat".

в системе класса.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.HTMLControl, атрибут не требуется, однако, в системе классов.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.WebControl атрибут является обязательным.

edit: позвольте мне быть более конкретным. с тех пор asp.net является в значительной степени абстрактным HTML, компилятору нужна какая-то директива, чтобы он знал, что конкретный тег должен выполняться серверный. если бы этого атрибута не было, то он не знал бы, чтобы сначала обработать его на сервере. если его там нет, он предполагает, что это обычная разметка и передает ее клиенту.

Я думаю, что Microsoft может исправить эту двусмысленность, заставив компилятор добавить атрибут runat до того, как страница будет скомпилирована, что-то вроде стирания типа, которое java имеет с генераторами, вместо стирания, он может писать runat=server везде, где он видит ASP: префикс для тегов, поэтому разработчику не нужно будет беспокоиться об этом.

Если вы используете его на обычных HTML-тегах, это означает, что вы можете программно манипулировать ими в обработчиках событий и т. д., Например, изменить href или класс тега привязки при загрузке страницы... только сделайте это, если вам нужно, потому что ванильные html-теги идут быстрее.

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

Если @JonSkeet где-нибудь поблизости, он, вероятно, сможет дать гораздо лучший ответ.

при отправке данных в ASP.NET веб-сервер элементы управления, упомянутые как Runat = "server", будут представлены в виде точечных сетевых объектов в серверном приложении. Вы можете вручную ввести код в HTML-элементы управления или же использовать Запуск От Имени Сервера Правой Кнопкой в режиме конструктора. ASP.NET элементы управления автоматически получат этот атрибут, как только вы перетащите его из toolbox, где обычно HTML-элементы управления этого не делают.

довольно избыточный атрибут, учитывая, что тег "asp", очевидно, является элементом ASP и должен быть достаточным, чтобы идентифицировать его как доступный элемент на стороне сервера.

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

Я просто пришел к этому выводу методом проб и ошибок: атрибут runat="сервер" необходима для доступа к элементам во время выполнения на стороне сервера. Удалите их, перекомпилируйте и посмотрите, что произойдет.

runat="Server" указывает, что для элемента управления HTML будет выполняться обратная передача на сервер."

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

.NETMVC страницы не используют postback (за исключением форма "submit"). MVC использует JQUERY для управления страницей на стороне клиента (таким образом, минуя необходимость много postback сообщения на сервер).

так: .NET Веб-Форм... используйте много в разметке страницы.

.NETMVC почти никогда не использует "runat" атрибут в разметке страницы.

надеюсь, это поможет прояснить, почему runat необходимо...

Comments

    Ничего не найдено.