Почему веб-формам ASP.NET нужен Runat = атрибут “Сервера”?

202
задан bluish 25 January 2012 в 03:38
поделиться

6 ответов

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

Этот разговор имелся на Mike Schinkel Блог между собой и Talbot Crowell из Microsoft National Services. Релевантная информация ниже (первый абзац, перефразируемый из-за грамматических ошибок в источнике):

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

, Если разработчик должен отметить некоторые теги (то есть <asp: />) для Механизма ASP.NET для игнорирования, то существует также потенциальная проблема конфликтов пространства имен среди тегов и будущих улучшений. Путем требования эти <runat="server"> атрибут, это отрицается.

Это продолжается:

, Если бы <runat=client> требовался для всех клиентских тегов, синтаксический анализатор должен был бы проанализировать все теги и разделить <runat=client> часть.

Он продолжает:

В настоящее время, Если мое предположение корректно, синтаксический анализатор просто игнорирует весь текст (теги или никакие теги), если это не тег с эти runat=server атрибут или “ <% ” префикс или ssi “ <!– #include †¦ (...) кроме того, так как ASP.NET разработан для разрешения разделения веб-разработчиков (foo.aspx) от веб-разработчиков (foo.aspx.vb), веб-разработчики могут использовать свои собственные инструменты веб-дизайнера для размещения HTML и клиентского JavaScript, не имея необходимость знать о ASP.NET определенные теги или атрибуты.

110
ответ дан George Stocker 23 November 2019 в 05:02
поделиться

Мне обычно не нравится предполагать, но я иду в на этом...

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

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

Помнят ту странную рекламу?

Связанный: Статья от Регистра с некоторой историей.NET.

33
ответ дан Corbin March 23 November 2019 в 05:02
поделиться

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

<INPUT type="submit" runat=server />

Это - по существу то же как:

<asp:Button runat=server />

Удаляют тег runat=server из первого, и у Вас есть стандартная кнопка HTML, которая работает в браузере. Существуют причины и против выполнения конкретного управления в сервере, и нет никакого пути к ASP.NET для "принятия" то, что Вы хотите на основе разметки HTML, которую Вы включаете. Могло бы быть возможно "вывести" runat=server для <asp:XXX /> семейство средств управления, но мое предположение - то, что Microsoft полагала бы что взлом к синтаксису разметки и механизму ASP.NET.

13
ответ дан Dave Swersky 23 November 2019 в 05:02
поделиться

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

3
ответ дан tvanfosson 23 November 2019 в 05:02
поделиться

Это там, потому что все средства управления в.NET ASP наследовались Системе. Сеть. UI.Control, который имеет атрибут "runat".

в системе классов. Сеть. UI.HTMLControl, атрибут не требуется, однако, в системе классов. Сеть. UI.WebControl атрибут требуется.

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

1
ответ дан Russ Bradberry 23 November 2019 в 05:02
поделиться

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

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

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

1
ответ дан indra 23 November 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: