Runat server что это
ASP.NET управления сервером
В этой статье ASP.NET элементов управления серверами, таких как элементы управления HTML-серверами, элементы управления веб-серверами, элементы управления списками и т. д.
Оригинальная версия продукта: ASP.NET
Исходный номер КБ: 306459
Элементы управления сервером в ASP.NET странице
Структура ASP.NET страницы включает ряд встроенных элементов управления серверами, предназначенных для обеспечения более структурированной модели программирования в Интернете. Эти элементы управления предоставляют следующие функции:
Помимо встроенных элементов управления, ASP.NET страницы также предоставляет возможность создания пользовательских элементов управления и настраиваемого управления. Пользовательские элементы управления и настраиваемые элементы управления могут повысить и расширить существующие элементы управления, чтобы создать гораздо более насыщенный пользовательский интерфейс.
Элементы управления HTML-серверами
Элементы управления HTML-сервером — это элементы HTML, которые включают runat=server атрибут. Элементы управления HTML-серверами имеют тот же выход HTML и те же свойства, что и соответствующие теги HTML. Кроме того, элементы управления HTML-серверами обеспечивают автоматическое управление состоянием и события на стороне сервера. Элементы управления HTML-серверами предлагают следующие преимущества:
Базовый System.Web.UI.HtmlControls.HtmlControl класс содержит все общие свойства. Элементы управления HTML-серверами получаются из этого класса.
Чтобы использовать элемент управления HTML-сервером, используйте следующий синтаксис (который использует HtmlInputText элемент управления в качестве примера):
Лекция 4. Серверные элементы управления Продолжение.
Button
Button – это командная кнопка, нажатие на которую часто приводит к отправке данных на сервер. Можно создавать кнопки двух типов: для передачи данных формы(submit button) или командные кнопки для выполнения различных функций, связанных с данной кнопкой. Если на форме есть несколько кнопок, свойство CommandName позволяет узнать, какая именно кнопка была нажата.
* События, которые происходят в браузере клиента и обрабатываются кодом на Javascript.
* События загрузки страницы.
* События элементов управления.
Например, чтобы обработать щелчок на кнопке, мы переопределяем событие Click.
События можно определить через вкладку событий в окне свойств. Второй аргумент всех обработчиков событий имеет тип EventArgs или какой-либо, унаследованный от него.
Например, мы хотим создать форму для заполнения резюме. Автор может иметь заранее неизвестное нам количество предыдущих мест работы. Добавим на форму кнопку, при нажатии на которую в форму добавляется один элемент ввода текста.
Здесь мы имеем массив из 10 элементов типа TextBox. Новый элемент создается в момент нажатия на кнопку «Еще». Можно добавить до 10 новых элементов. Как и раньше, они размещаются в контейнере, это нужно, чтобы они выводились до кнопки.
При помощи свойства OnClientClick можно задать клиентский сценарий на JavaScript. Его значением может быть встроенная функция, или описанная в теле страницы. Клиентский код выполняется до серверного кода, заданного в свойстве OnClick.
Image
Элемент управления asp:image соответствует тегу img языка HTML. Его можно использовать для динамического добавления на страницу новых изображений. Вернемся к нашему туристическому агентству. Мы решили, что кода клиент выбирает города, на страницу автоматически должна выводиться карта соответствующего города. Оставляем это в качестве упражнения. Карты городов можно найти через Яндекс.
Как всегда, свойства можно менять из программы. Например, меняя значение ImageUrl, можно организовать просмотр множества картинок в виде слайд-шоу. Создайте директорию images и поместите в него несколько картинок image1, image2 и так далее.
Напишем новую страницу.
ImageButton
Элемент управления ImageButton представляет собой комбинацию элементов Image и Button. Его можно использовать для создания изображений, чувствительных к клику мышки. Щелчок является событием, при наступлении которого выполняется некоторый кoд.
ImageButton позволяет достигнуть эффекта, аналогичного карте изображения. Событие Click позволяет узнать координаты щелчка мыши и реагировать соответственно региону, в котором была нажата мышь. Обработчик события должен принимать аргумент типа ImageClickEventArgs – наследникаSystem.EventArgs. У него есть дополнительные поля X и Y – координаты клика мышки.
Вернемся опять к турагентству. Директор вызвал вас(программиста) и попросил сделать следующее: на странице с изображением карты Каира необходимо сделать так, чтобы когда пользователь нажимал мышкой в любое место, открывалась карта района, на который он нажал. Всего имеется 9 районов. Все картинки имеют размер 300 на 300 пикселов. Районы одинаковые, расположены в таблице 3 на 3.
А более простое использование –создание красивых нестандартных кнопок. Свойство CommandName используется так же, как и в случает с обычной кнопкой.
Картинки этого примера есть в поставке Visual Studio 2005 Microsoft Visual Studio 8Common7IDEProjectTemplatesWebCSharp1033. Скопируйте их в папку Images вашего проекта и добавьте их в проект.
Эту функцию вставьте в файл отделенного кода.
У первой кнопки установлено свойство ToolTip. Посмотрите страницу в Internet Explorer. Окно с подсказкой появится при наведении на эту кнопку. А вот Opera выводит подсказку для всех кнопок. Только для тех, в которых установлен ToolTip, он выводится на первой строчке. Во второй – адрес.
У кнопки также показано использование свойства OnClientClick. Оно задает клиентский сценарий, который будет исполняться при нажатии на кнопку без обращения к серверу. Здесь это функция alert языка Javascript – вызов окна с уведомлением.
HyperLink и LinkButton
HyperLink – гиперссылка обычная или с картинкой. Они позволяют передвигаться по сайту или давать ссылку на другие сайты.
обозначает корневой каталог текущего сайта.
LinkButton – это кнопка, которая выглядит как гиперссылка. Нажатие на нее приводит к перезагрузке страницы. В свойстве PostBackUrl можно задать адрес страницы, на которую будет перенаправлен запрос.
BulletedList
Этот элемент управления позволяет воспроизвести нумерованные и ненумерованные маркированные списки и добавляет к этому много новых возможностей. Это новый элемент ASP.NET 2.0 и тоже может быть привязан к данным.
Тип списка определяется свойством BulletStyle. Список может быть пронумерован цифрами, буквами или латинскими числами, или же помечен маркерами разных форм.
Выглядит на странице как
Если свойство BulletStyle поменять на «Circle», то будет сгененирован ненумерованный список
При значении CustomImage необходимо задать картинку в свойстве BulletImageUrl. Элементами списка могут быть гиперссылки и кнопки-гиперссылки.
Сами гиперссылки следует записывать в атрибут ListItem Value.
Тип LinkButton превращает пункты списка в гиперссылки, которые вызывают перезагрузку страницы. Обработчик нажатия на кнопки принимает аргумент, в котором содержится информация об индексе нажатого пункта.
Literal
Mode=»Encode» кодирует текст так, чтобы в браузере был виден именно этот HTML-код, заменяя специальные символы разметки CER-последовательностями.
Это полезно, если бывает нужно вывести код, и не только HTML. На некоторых сайтах, где есть учебники по С++в plain text, в примерах кода встречается строка
Table
Свойство Rows nаблицs является контейнером строк — элементов TableRow, а они, в свою очередь имеют свойтсво Cell — коллекцию элементов TableCell. Сам TableCell – контейнер любых элементов управления. Их нельзя вставлять в таблицу иначе, чем в один из элементов TableCell. Текст в ячейку можно записать через свойство Cell.Text или вставкой элемента Literal.
Строки таблицы могут быть также типа TableHeaderRow и TableFooterRow. Такие строки всегда отображаются на мобильных устройствах с небольшим экраном, даже если таблица большая и для ее просмотра нужна прокрутка. Ячейки таблицы могут быть типа TableHeaderCell – наследника TableCell. Текст в них отображается выделенным полужирным шрифтом и центрирован.
Этот пример иллюстрирует создание таблицы в программном режиме. Игра «Найди число» тренирует внимание и память. В начале игрок вводит размер таблицы n. Программа генерирует квадратную таблицу, где числа от 1 до n^2 написаны на кнопках и перемешаны в случайном порядке.
Calendar
Этот класс не имеет аналогов в html. Определив единственный элемент управления, можно создать и предоставить в распоряжение посетителей полноценный календарь, где они смогут прокручивать месяцы, выбирать день или неделю. Внешний вид этого элемента управления может быть самым разнообразным. И все это реализуется средствами html. Раньше это было возможно только с помощью ActiveX – контролов, которые нужно загружать с сервера, регистрировать в системе и проверять на безопасность.
Calendar имеет множество свойств.
CellPadding «Набивка»(расстояние между границами клетки и ее содержимым
CellSpacing расстояние между клетками
DayNameFormat Способ написания названий дней недели. Может принимать значения FirstLetter, FirstTwoLetters, Full, Short
FirstDayOfWeek Для задания первого дня недели, Default – установки, принятые в системе
NextPrevFormat Показ названий предыдущего и последующего месяцев. FullMonth – полное название, ShortMonth – первые 3 буквы., CustomText – любой текст, определенный программистом
SelectionMode Способ выбора даты. Доступны Day, DayWeek, DayWeekMonth и None
ShowDayHeader Показывать ли названия дней недели(да по умолчанию)
ShowGridLines Показывать ли сетку(нет по умолчанию)
ShowTitle Показывать ли заголовок(нет по умолчанию)
TitleFormat MonthYear, Month
TodaysDate Какая дата будет выбрана текущей. По умолчанию – дата на сервере.
VisibleDate Месяц, который будет показан в календаре
Calendar поддерживает различные календарные системы – не только привычный григорианский, но и юлианский, иудейский, мусульманский, буддистский. Это можно сделать, изменяя культурную информацию страницы.
Выбор клиентом даты начала путешествия на сайте туристистического агентства.
Если мы посмотрим на HTML-код страницы, которая сгенерирована этой программой, то увидим довольно объемный текст, в том числе функцию на JavaScript и большую таблицу, каждая ячейка которой ссылается на эту функцию. Было бы непросто написать все это самим.
Свойства SelectMonthText и SelectWeekText задают символы HTML, по умолчанию > и >> эта последовательность отображается в символы >.
С событием выбора даты OnSelectionChanged связан обработчик calSelectChange. В нем мы сначала проверяем, является ли выбранная дата будущей по отношению к сегодняшнему дню. Если да, то создается новая кнопка для подтвержения выбранной даты.
Такая строка в Page_Load
сделает календарь таким, какой принят в Таиланде. Не забудьте включить пространство имен глобализации.
Свойство SelectionMode, равное DayWeekMonth, позволяет выбрать как конкретный день, так и неделю или месяц. Как же получить выбранный диапазон дат? SelectedDate возвращает только первый день диапазона. Для этого существует коллекция Calendar1.SelectedDates.
А еще элегантнее будет написать так:
Можно запретить пользователю выбирать прошлую дату. Для этого можно воспользоваться свойством IsSelectable.
Автоформатирование календаря
У календаря не один стиль, а несколько. Разные стили применяются к заголовку, к выходным и будним дням, дням нетекущих месяцев и к сегодняшнему дню. Стили можно задать как с помощью внешних классов, так и непосредственно. Все это просто поражает. Можно поставить календарь на тысячах разных сайтов и везде он будет выглядеть по-разному.
В Visual Studio 2005 можно поменять внешний вид календаря с помощью предопределенных шаблонов. У многих элементов управления в режиме дизайна есть «умные ярлычки»(smart tags). В них есть ссылка на диалог автоформатирования календаря. При этом уже сделанные изменения в свойства сохранятся.
Внешний вид календаря можно менять в обработчике события DayRender. У аргумента обработчика DayRenderEventArgs два свойства: Cell с типом TableCell – наследника WebControl, и Day типа CalendarDay. В Cell можно добавлять новые элементы, но только такие, которые не запускают событий.
В этом примере проверяется день, и если это 8 марта, то вокруг него рисуется красная рамка. А еще добавляется элемент LiteralControl с текстом, соответствующим моменту.
Отправка данных другой странице
В ASP.NET 1.1 не разрешалась отправка данных между страницами. В ASP.NET 2.0 элементы управления имеют свойство PostBackUrl, где можно указать, какой странице система должна передать Web-форму, если отправление данных на сервер инициировано этим элементом управления.
Через свойство PreviousPage страницы можно выяснить, какая страница была источником постбэка нашей страницы.
На первой странице рисуется календарь.
А на второй читаются значения первой формы:
Заключение
Мы рассмотрели только некоторые элементы управления и убедились, что они предоставляют богатые возможности. В следующей лекции мы рассмотрим другой важный класс элементов управления – валидаторы.
ASP.Net. Лекция 3. Серверные элементы управления (исходники, документация)
Формы применяются в большинстве сайтов. Например, если вы пишете письмо в веб-интерфейсе, появляется форма с текстовыми полями, соответствующими адресату, теме, и тексту письма. Нажатием на кнопку можно добавить прилагаемый файл и окончательно послать письмо кнопкой Send.
Форма HTML содержит теги, такие как текстовое поле, выпадающий список, переключатели (radiobuttons) и флажки (checkbox), кнопки.
Все формы обрабатываются методом POST. Атрибут Action можно задавать, но не обязательно. По умолчанию это текущая страница.
Перечислим группы элементов управления.
Элементы управления HTML
Элементы управления HTML являются наследниками класса System.Web.UI.HtmlControls.HtmlControl. Они непосредственно отображаются в виде элементов разметки HTML. Их отображение не зависит от типа браузера. Свойства таких элементов полностью соответствуют атрибутам тегов HTML.
Сравните обычный тег
с элементом управления HTML
Разница заключается только в наличии атрибута =»server». Но он дает колоссальную разницу. Теги сервер отображает как есть, а элементом управления можно манипулировать в коде. Так можно написать в функции-методе страницы только во втором случае.
что равносильно this.Reset1.Value = «АСП»;
Следовательно, Reset1 становится одним из членов класса страницы.
Их можно использовать, если необходимо получить определенные теги HTML, или если нужно конвертировать старые страницы asp. Элементы управления HTML можно размещать на одной странице вперемешку с серверными элементами.
Стандартные или серверные элементы управления
Серверные элементы мощнее, потому что они привязаны не к разметке, а к функциональности, которую нужно обеспечить. Многие элементы не имеют аналогов в HTML, например, календарь. Их отрисовка полностью контролируется ASP.NET. Перехватывая события PreRender, Init, Load, можно вмешаться в этот процесс. Объявления серверного элемента управления начинаются с блока и заканчиваются
Возможно также закрыть объявление тегом />, если внутри блока нет текста.
Свойства этих элементов строго типизированы в отличие от HTML-элементов.
DropDownList выдаст тот же самый код, если будет определен так:
Итак, если мы хотим перейти с написания страниц HTML к написанию кода asp:
Отличие серверных элементов управления в том, что их можно программировать на сервере, и получать информацию от них тоже на сервере.
Попробуем написать такую страницу:
Запустите ее на выполнение, выберите Компакт-диски и нажмите на кнопку. На форме появится надпись «Вы выбрали Компакт-диски».
Вот код этой страницы в браузере:
Итак, браузеру посылается простая страница, на которой нет скриптов. То же поведение можно было бы запрограммировать с помощью JavaScript. Разница в том, что пользователь смог бы увидеть бы увидеть код на JavaScript, скопировать и использовать его на своих страницах. В этом нет ничего плохого, но иногда люди хотят сохранить свой код в тайне в целях защиты интеллектуальной собственности.
Событие SelectedIndexChanged имеется и тут, как и у всех классов-наследников от абстрактного класса ListControl.
Panel
Часто бывает нужно вставить элемент управления в точно определенное место страницы. Например, объединим два предыдущих примера.
Эта страница работает не так, как нам хотелось. Текст оказался после выпадающего списка, хотя логичней было бы, чтобы текст шел в начале. В Javascript для этого используют элемент разметки
Чтобы заставить метку отображаться перед списком, необходимо поместить перед DropDownList обьект Panel.
после чего вызывать метод Controls.Add(. ) от этого оьекта.
Свойство HorizontalAlign элемента Panel полезно, если нужно установить выравнивание содержащихся в нем элементов управления. Поменяем код в предыдущем примере:
Текст теперь размещается в центре метки.
Булевское свойство Wrap элемента Panel заставляет переносить текст на новую строку, есть установлено, или расширять раздел, если текст не помещается в одну строку, если не установлено.
Если в программе установить свойство Visible панели в False, можно сделать невидимыми все элементы, которые в нем находятся. Стили, установленные в панели, наследуются всеми вложенными элементами.
Реализуется такая возможность с помощью атрибута css overflow.
Ставить свойство ScrollBars в Vertical или Horizontal я вам не рекомендую. этом случае генерируется стиль overflow-x, а это не работает в браузере Opera 9.0. Стиль overflow не поддерживается Opera 6.
Вертикальную полосу прокрутки можно установить и слева. Для этого поменяйте свойство Direction в RightToLeft.
Для Panel можно задать фоновую картинку с помощью свойства BackImageUrl.
Заключение
Серверные элементы управления предоставляют в распоряжение программиста свойства, методы и события. При их помощи мы можем абстрагироваться от деталей HTML кода и работать со страницей и ее элементами как с объектами. Мы рассмотрели часть серверных элементов управления. С новыми интересными элементами управления познакомимся в следующей лекции.
Почему ASP.NET webforms нужен атрибут Runat=»Server»?
почему я должен указать runat=»server» на всех моих ASP.NET управляет, когда это обязательный атрибут и server является единственным вариантом, доступным в моих ограниченных знаниях ASP.NET, и я получаю ошибку, если не использую ее?
Я понимаю, что я могу дополнительно использовать его в своих HTML-тегах, и я понимаю парадигму клиент/сервер и то, что она фактически определяет.
является ли это избыточным тегом, который может просто подразумеваться элементом управления ASP.NET контроль, или есть глубинная причина?
13 ответов
Я всегда считал, что это было там больше для понимания, что вы можете смешать ASP.NET теги и HTML-теги, а также HTML-теги имеют возможность либо быть runat=»server» или нет. Это не повредит ничего, чтобы оставить тег, и это вызывает ошибку компилятора, чтобы вытащить его. Чем больше вы подразумеваете о веб-языке, тем труднее начинающему программисту прийти и изучить его. Это такая же причина, как и любая, чтобы быть подробным об атрибутах тегов.
этот разговор был на блог между ним и Талботом Кроуэллом из Microsoft National Services. Соответствующая информация приведена ниже (первый абзац перефразирован из-за грамматических ошибок в источнике):
[. ] но важность больше для согласованности и расширяемости.
если был необходим для всех тегов на стороне клиента, парсер должен был бы разобрать все теги и удалить часть.
Я обычно не люблю гадать, но я иду на это.
помните эти странные объявления?
не все элементы управления, которые могут быть включены в страницу должны запускаться на сервере. Например:
это по существу то же самое, что:
удалите тег runat=server из первого, и у вас есть стандартная кнопка HTML, которая работает в браузере. Есть причины для и против запуска определенного элемента управления на сервере, и нет никакого способа для ASP.NET чтобы «предположить», что вы хотите на основе HTML разметка включает. Возможно, можно» вывести » runat=server для семейство элементов управления, но я предполагаю, что Microsoft будет считать, что взлом синтаксиса разметки и ASP.NET двигатель.
статья Microsoft Msdn забытые элементы управления: серверные элементы управления HTML объясняет использование runat= «server» с примером в текстовом поле путем преобразования его в
выполнение этого даст вам программный доступ к элементу HTML на сервер перед веб-страницей создается и отправляется клиенту. Элемент HTML должен содержать атрибут id. Этот атрибут служит в качестве идентификатора для элемента и позволяет программировать элементы по их конкретным удостоверениям. В дополнение к этому атрибуту, элемент HTML должен содержать runat= «server». Это сообщает серверу обработки, что тег обрабатывается на сервере и не считается традиционный элемент HTML.
короче говоря, чтобы включить программный доступ к элементу HTML, добавьте runat=»server» к нему.
Я подозреваю, что это связано с тем, как серверные элементы управления идентифицируются во время обработки. Вместо того, чтобы проверять каждый элемент управления во время выполнения по имени, чтобы определить, требуется ли обработка на стороне сервера, он делает выбор во внутреннем представлении узла по тегу. Компилятор проверяет наличие всех элементов управления, которым требуются теги сервера, на этапе проверки.
HTML элементы в ASP.NET по умолчанию файлы обрабатываются как текст. Чтобы сделать эти элементы программируемыми, добавьте runat=»server» атрибут элемента HTML. Этот атрибут указывает, что элемент должен рассматриваться как серверный элемент управления.
в системе класса.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.HTMLControl, атрибут не требуется, однако, в системе классов.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.WebControl атрибут является обязательным.
edit: позвольте мне быть более конкретным. с тех пор asp.net это в значительной степени абстракция HTML, компилятору нужна какая-то директива, чтобы он знал, что конкретный тег должен выполняться серверный. если бы этого атрибута не было, то он не знал бы, чтобы сначала обработать его на сервере. если его нет, он предполагает, что это обычная разметка и передает ее клиенту.
Я думаю, что Microsoft может исправить эту двусмысленность, заставив компилятор добавить атрибут runat до компиляции страницы, что-то вроде стирания типа, которое java имеет с дженериками, вместо стирания, он может писать runat=server везде, где он видит ASP: префикс для тегов, поэтому разработчику не нужно беспокоиться об этом.
Если вы используете его на обычных тегах html, это означает, что вы можете программно манипулировать ими в обработчиках событий и т. д., Например, изменить href или класс якорного тега при загрузке страницы. только сделайте это, если вам нужно, потому что теги vanilla html идут быстрее.
Что касается пользовательских элементов управления и серверных элементов управления, нет, они просто не будут работать без них, не вникая во внутренности препроцессора aspx, не могли точно сказать, почему, но догадались бы, что, вероятно, по уважительным причинам, они просто написали парсер таким образом, ища вещи, явно помеченные как «что-то сделать».
Если @JonSkeet где-нибудь поблизости, он, вероятно, сможет дать гораздо лучший ответ.
при отправке данных в ASP.NET веб-сервер элементы управления, упомянутые как Runat = «server», будут представлены как объекты Dot Net в серверном приложении. Вы можете вручную ввести код в элементах управления HTML или использовать Запуск От Имени Сервера Правой Кнопкой в режиме конструктора. ASP.NET элементы управления автоматически получат этот атрибут, как только вы перетащите его из toolbox, где обычно HTML-элементы управления этого не делают.
довольно избыточный атрибут, учитывая, что тег «asp», очевидно, является элементом ASP и должен быть достаточным, чтобы идентифицировать его как доступный элемент на стороне сервера.
в другом месте, однако, он использовал для повышения обычных тегов, которые будут использоваться в коде.
Я просто пришел к этому выводу методом проб и ошибок: атрибут runat=»сервер» необходима для доступа к элементам во время выполнения на стороне сервера. Удалите их, перекомпилируйте и посмотрите, что произойдет.
runat=»Server» указывает, что для элемента управления HTML произойдет обратная передача на сервер.»
использование веб-форм postback постоянно сигнализировать серверу, чтобы обработать событие управления страницей.
.NET MVC страницы не использовать postback (за исключением форма «submit» ). MVC использует JQUERY для управления страницей на стороне клиента (таким образом, минуя необходимость много postback сообщения на сервер).
.NET MVC почти никогда не использует «runat» атрибут в разметке страницы.
надеюсь, это поможет прояснить, почему runat необходимо.