Asp справочник по @ директивам


Содержание

Директива @Register в ASP.NET 2.0

Я использую следующую директиву на моей странице aspx:

И моя страница имеет фрагмент кода, подобный этому:

Но я получил следующую ошибку:

Ошибка Parser: ошибка при разборе ресурс, необходимый для обслуживания этого запроса. Просмотрите следующие подробные сведения об ошибке синтаксического анализа и изменить исходный файл соответственно.

Сообщение об ошибке Parser: неизвестный тег сервера. MyWebParts_tag: HelloWorldWebPart

Что случилось? Спасибо.

В вашей директиве реестра отсутствует информация о assembly или src .

Asp справочник по @ директивам

Обновлен: Ноябрь 2007

Директивы задают параметры, используемые компиляторами страниц и пользовательских элементов управления при обработке файлов страниц веб-форм ASP.NET (ASPX) и файлов пользовательских элементов управления (ASCX).

При использовании ASP.NET любой блок директив ( ), не содержащий явного имени директивы, обрабатывается для страницы как директива @ Page и как директива @ Control — для пользовательского элемента управления.

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

Декларативно связывает сборку с текущей страницей или пользовательским элементом управления.

Определяет атрибуты, относящиеся непосредственно к элементу управления, используемые анализатором и компилятором ASP.NET и могущие быть включенными только в ASCX-файлы (пользовательские элементы управления).

Декларативно указывает на то, что страница или пользовательский элемент управления реализует заданный интерфейс платформы .NET Framework.

Импортирует явным способом пространство имен в страницу или пользовательский элемент управления.

Идентифицирует страницу как главную и определяет атрибуты, используемые анализатором и компилятором ASP.NET и могущие быть включенными только в MASTER-файлы.

Определяет класс или виртуальный путь, используемый для типизации свойства Master страницы.

Декларативно управляет политиками кэширования выходных данных страницы или пользовательского элемента управления.

Определяет особые атрибуты для страницы, используемые анализатором и компилятором страниц ASP.NET и могущие быть включенными только в ASCX-файлы.

Создает строго типизованную ссылку на исходную страницу из целевого объекта межстраничной записи данных.

Декларативно связывает страницу, пользовательский элемент управления или элемент управления COM с текущей страницей или пользовательским элементом управления.

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

. Часть 1

Интерфейс к базе данных с помощью ASP

Постановка задачи

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

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

Я почти уверен, что подобная задача актуальна применительно практически к любому сайту, тем более что подобным образом (разве что без возможностей поиска, сортировки и удаления) работает большинство гостевых книг (guestbook).

Что нам понадобится

Для реализации вышеизложенной задачи нам потребуется персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation, и Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Прежде всего создадим базу данных статей, для чего:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных. Назовем ее «Articles»;
  • в созданной базе данных создадим таблицу с именем, например «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений (рис. 1);
  • заполним таблицу несколькими статьями в соответствии с созданными полями (рис. 2);
  • сохраним базу данных в файле «ArticlesDB.mdb».

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

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access — «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».


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

Оформляем главную страницу (index.asp)

С ASP работать очень просто. Для этого надо всего лишь вставить текст скрипта ASP в пару тэгов . В остальном ASP-файл ничем не отличается от HTML-файла (за исключением, пожалуй, расширения). Комментарии в HTML, как известно, вставляются в пару тэгов , в ASP же закомментировать строку можно при помощи символа ‘ (апостроф) в ее начале.

Теперь давайте разберемся. Во-первых, как вы наверняка заметили, ASP-код легко сочетается с HTML-тэгами; в этом его достоинство. Так, к примеру, строка Response.Write Link & «
» отображает на экране браузера клиента подготовленное сервером значение переменной Link и HTML-тэг
, то есть перевод строки. Особый интерес вызывает переменная rs. Для искушенных программистов сразу скажу — это указатель. Однако в ASP с целью облегчения работы начинающих указатели маскируются. Здесь не встретишь громоздких С’шных конструкций, типа «я знаю, что ты знаешь, что я знаю», или, выражаясь программистским языком, указатель на указатель… Однако сделано это так искусно, что гибкость программирования при этом не теряется, нет лишь прямой работы с указателями, а только работа с помощью специальных функций, скрывающих от программиста рутину и защищающих указатели от некорректных действий. Таким образом, выражение rs.Fields («Article»).value означает значение поля «Article» текущего значения указателя на элемент базы данных (в нашем случае статей) и содержит текст статьи, которая соответствует текущей позиции указателя на все статьи. Переход к следующему элементу базы (смещение указателя) выполняется с помощью инструкции Rs.MoveNext. В приведенном выше примере это не делается, а попросту формируется ссылка на текст статьи в виде ее названия и отображается комментарий самой первой статьи, соответствующей результату запроса. Давайте попробуем отобразить все статьи нашей базы данных на главной странице в виде HTML. И еще, обратите особое внимание на директиву:

Она по сути формирует ссылку на файл, содержащий шаблон отображения самой статьи, причем передает идентификатор статьи ему в качестве параметра. Полностью файл шаблона приведен в приложении к настоящей статье, а механизм его работы может быть кратко представлен следующим образом:

Первая строчка скрипта шаблона HTML присваивает переменной TheID значение, переданное ссылкой с использованием метода Request.QueryString. Далее открывается база данных, из которой читается статья (запись), соответствующая идентификатору, переданному из главного скрипта (index.asp).

Создаем главную страницу

Таким образом в таблицу в цикле будут добавляться ряды со ссылками на статьи и с аннотациями, пока не будут отображены все статьи из базы данных. Следует обратить внимание на переменную Cnt. По окончании цикла она будет содержать число обработанных статей (рядов таблицы).

Язык структурированных запросов — SQL

Настала пора разобраться с тем, что таится за строчками:

По сути, именно за этими двумя строчками кроется работа с нашей базой данных: первая представляет собой текстовую строку с запросом к базе данных (текстовые строки в ASP записываются в двойных кавычках); вторая — содержит директиву выполнения этого запроса с одновременным присвоением результата переменной (указателю на записи в базе данных). В рамках настоящей статьи мы не будем рассматривать SQL (Structured Query Language) во всех деталях, а остановимся лишь на тех его операторах, без понимания которых дальнейшая работа будет невозможна. Для тех, кому этого покажется недостаточным, советую посетить отобранные мною сайты с детальной документацией по SQL.

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

DELETE удаляет те ряды из «Имя Таблицы», которые удовлетворяют условию, определенному в «Определении», и возвращает число удаленных рядов. Если выполнить команду DELETE без условия WHERE, то все ряды указанной таблицы будут удалены. В этом случае DELETE возвратит 0. Ключевое слово LOW_PRIORITY откладывает выполнение операции DELETE до завершения работы чтения из таблицы других клиентов.

SELECT используется для извлечения рядов (записей) из одной или более таблиц. Выражение_Select определяет столбцы таблицы, значения которых необходимо извлечь. Все ключевые поля должны быть заданы в строгой последовательности. К примеру, выражение HAVING должно следовать за любым выражением GROUP BY и до любого выражения ORDER BY.

Выражение_Select можно заменить псевдонимом (alias) с помощью ключевого слова AS. Псевдоним используется в качестве идентификатора имени столбца и может быть использован наряду с ключевыми словами ORDER BY или HAVING.

Выражение HAVING может относиться к любому столбцу или псевдониму в Выражении_Select. Оно применяется к запросу в последнюю очередь, непосредственно перед посылкой данных клиенту. SELECT . INTO OUTFILE ‘имя_файла’ заносит отобранные записи в файл. Файл создается непосредственно на сервере и не может «уже существовать» (одна из основных причин такого механизма заключается в предотвращении случайного «затирания» различных важных файлов).

Илон Маск рекомендует:  Глава 4 логический подход к построению систем ии

INSERT используется для добавления новых записей в существующую таблицу. Допустимо две формы использования INSERT.

Первая форма — INSERT . VALUES — вставляет ряды на основании заданных значений. Вторая форма — INSERT . SELECT — вставляет ряды, выбранные из другой таблицы.

Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Ключевое слово IGNORE в команде INSERT позволяет избегать вставки повторяющихся строк (используется в сочетании с ключевыми словами PRIMARY или UNIQUE). Для второй формы INSERT INTO . SELECT операция не может содержать выражения ORDER BY. Таблица, в которую производится добавление записей, не может присутствовать в выражении FROM части SELECT запроса потому, что запрещено производить выделение из той же самой таблицы, в которую производится вставка.

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

UPDATE обновляет поля существующей таблицы новыми значениями. Выражение SET показывает, какие поля (столбцы) должны быть изменены, и значения, которые должны быть им присвоены. Выражение WHERE, если оно есть, указывает, какие ряды должны быть обновлены. В противном случае операция применяется ко всем рядам таблицы. Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Выражения UPDATE выполняются слева направо.

Обновляет значение поля Password в таблице WAPassword, записывая в поле, чей идентификатор ID равен 1 значение ‘passw’.

Увеличивает значение поля counter таблицы Счетчик на 1.

Удваивает поле age, а затем прибавляет 1 к его значению в таблице persondata.

Что такое Global.asa

Global.asa позволяет выполнять определенные скрипты в начале работы клиентской сессии или при инициализации IIS. Примером тому может служить простейший счетчик числа посещений сайта. Более того, допустимо использовать множественные файлы Global.asa. Однако следует помнить, что ASP-скрипт ищет самый близкий (расположенный в том же каталоге) файл Global.asa и использует именно его.

По сути, этот файл может содержать четыре скрипта: первый будет выполняться при инициализации службы IIS/PWS (Application_OnStart), второй — при остановке службы IIS/PWS (Application_OnEnd) (обычно эти первые два скрипта отрабатывают в процессе перезагрузки компьютера), и еще два скрипта выполняются дополнительно при инициализации сессии пользователя (Session_OnStart) и по ее окончании (Session_OnEnd). Данная схема очень сильно напоминает пары «конструктор-деструктор». Неспроста всякая переменная, которая должна быть использована (например, в текущей сессии), может быть инициализирована в Session_OnStart с тем, чтобы быть использованной в процессе работы сессии, она же уничтожается (обнуляется) в Session_OnEnd.

Global.asa не может содержать тэгов HTML. Недопустимо использование JavaScript. Не рекомендуется писать файл Global.asa с помощью каких-либо HTML-редакторов, для этого гораздо лучше использовать NotePad. И еще один совет: прежде чем вставлять скрипт в файл Global.asa, попробуйте его в работе в обычном ASP-файле.

Пример файла Global.asa

Добавляем новую статью (UploadForm.asp и Upload2DBS.asp)

Теперь, когда мы разобрались с SQL, можно приступать к добавлению новой статьи, причем делать мы это будем прямо с сайта, а если быть точнее — непосредственно с HTML-формы. Для этого сначала создадим файл с самой формой и определим скрипт-реакцию на подтверждение (кнопку «Publish the article!»). (Предполагается, что читатель знаком с азами построения HTML-форм, поэтому мы рассмотрим этот процесс, не вдаваясь в детали построения форм.)

Прежде всего следует уточнить задачу на этом этапе. Итак, очевидно следующее:

  • на загрузку статьи с сайта должен иметь право не каждый (следовательно, желательно предусмотреть пароль для доступа к этой функции);
  • у каждой статьи есть определенная тема (рубрика), причем она не может быть произвольной, а должна выбираться из списка;
  • список можно хранить непосредственно в HTML-файле и, каждый раз изменяя его, изменять сам файл. Это самый простой и быстрый способ;
  • однако для того, чтобы позволить динамически изменять и пополнять этот список, рекомендуется держать его в базе данных. Это позволит пользователям произвольным образом изменять его содержимое и не потребует переделки формы. Для простоты сначала рассмотрим вариант со встроенным («жестко прошитым») рубрикатором.

Как видим, передача управления осуществляется благодаря директиве ACTION=»http://localhost/Upload2DBS.asp»> в тэге формы. Тем самым указывается скрипт-ответ на реакцию пользователя после нажатия на кнопку «Publish the article!». Теперь остановимся на селекторе рубрик. Как уже отмечалось, желательно перевести его содержимое в базу данных. Для этого в нашей базе данных (файл ArticlesDB.mdb) создадим новую таблицу с именем, к примеру «Topics», в которой с помощью конструктора определим всего одно поле — «Topic» типа «текст». Далее заполним эту таблицу произвольными значениями нашего рубрикатора и отсортируем полученный список в алфавитном порядке. После чего следует заменить тэг

Теперь давайте разберемся с самой сутью дальнейшей работы. Что же должен делать наш скрипт-реакция?


Во-первых, следует позаботиться о том, чтобы все обязательные поля (а они отмечены звездочкой) были введены. Наиболее правильным способом проверки этого является скрипт, написанный на любом языке описания скриптов (например, JavaScript), который будет проверять, введены ли значения обязательных полей. Для этого достаточно добавить в определение тэга формы параметр onsubmit=»preprocess();», где preprocess() — имя функции-скрипта, который и будет осуществлять проверку. Здесь как нельзя кстати видно преимущество языков описания сценариев (JavaScript, Jscript, VBScript) перед ASP. ASP выполняется на стороне сервера, а перегружать связь «клиент-сервер» простой проверкой типа «введены ли значения», согласитесь, неправильно. Однако специально в целях обучения мы будем делать это с помощью ASP.

И еще. Прежде чем приступить к выполнению нашей задачи, следует сказать еще об одной небольшой проблеме: когда мы будем вставлять в ячейку базы данных текст, его форматирование (даже самое простое) не сохранится, и в дальнейшем его невозможно будет корректно отобразить на HTML-странице, поскольку поле Memo хранит неформатированную строку текста. Чтобы избежать этого, следует написать функцию, которая позволит производить примитивное HTML-форматирование введенного текста статьи, перед тем как записать его в базу данных. Другими словами, в самом примитивном случае (хотя бы для того, чтобы сохранить исходную разбивку на строки) функция должна вставлять символы конца строки там, где во входном потоке имеются символы переноса строк.

Удаляем статью (RemoveForm.asp и Rem.asp)

Было бы неплохо предусмотреть возможность удаления статьи с нашего сайта: во-первых, она может устареть, а во-вторых, в процессе ее подготовки не исключены ошибки или опечатки. Останавливаться на форме удаления статьи не будем, скажем лишь, что она содержит единственные элементы с запросом пароля и кнопкой удаления (см. файл RemoveForm.asp), и сразу перейдем к рассмотрению непосредственно процесса удаления:

Особое внимание следует уделить первым двум строкам. Они получают значение глобальной переменной текущего сеанса (сессии) работы со значением идентификатора текущей статьи (в нашем случае удаляемой), которая была инициализирована (файл ArtTmp.htm) следующей строкой:

Таким образом, в текущий скрипт передается в качестве параметра сеансовая переменная с идентификатором текущей статьи, которую необходимо удалить. Имеется в виду, что ссылка на удаление присутствует в странице с шаблоном (файл ArtTmp.htm) и удаляемая статья является текущей.

Организуем поиск (SearchForm.asp и SearchDBS.asp)

Как известно, без поиска навигация в сколь-нибудь солидной базе данных невозможна в принципе. Попробуем организовать поиск статьи по ее реквизитам, причем постараемся организовать булев (логический) поиск, соединяя отдельные значения критериев поиска с помощью логики «И/ИЛИ».

Опять же не заостряя внимание на поисковой форме (файл SearchForm.asp), перейдем непосредственно к самому процессу поиска:

Самое интересное происходит при формировании запроса к базе из составляющих:

В зависимости от введенной пользователем комбинации исходных полей из этих компонентов формируется окончательный запрос, в частности для полей «Author» и «Title». Возможны четыре случая: оба поля пусты, пусто первое поле, пусто второе поле и оба поля не пусты. Соответствующая строка SQL-запроса в каждом из этих случаев формируется по-своему. То же самое относится к состоянию селекторов рубрик статей и порядку их сортировки. При добавлении той или иной подстроки учитывается состояние «радиокнопок» И/ИЛИ и соответствующая подстрока добавляется в SQL-запрос, предваряясь логическим элементом «and» или «or» соответственно. После того как окончательный запрос сформирован, он выполняется, а результирующая страница формируется исходя из списка статей, удовлетворяющих критериям.

Полный код приведенных в статье примеров, включая файл базы данных, находится на нашем CD-ROM.

И в заключение

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

Среди множества инструментальных средств, служащих для облегчения создания ASP-приложений, выделяются два: Easy ASP © Eric Banker, 2000 и Microsoft InterDev из комплекта Microsoft Visual Studio 6.0. Первый — очень удобное, несложное и небольшое средство для быстрого создания ASP-приложений. Второй представляет собой мощный, тяжеловесный интегрированный пакет в духе Microsoft для разработки всевозможных Web-приложений.

Временная версия EasyASP 4.0 находится на нашем CD-ROM.

Среди огромного числа сайтов мною были отобраны те, посещение которых было для меня особенно полезным и с которыми хотелось ознакомить читателей, а именно:

http://www.15seconds.com/issue/000210.htm — создание динамичных JavaScript-скриптов с помощью ASP и интерфейсов к базам данных

http://www.alphasierrapapa.com/iisdev/ — сайт, посвященный разработке серверов IIS с помощью ASP

http://www.websiteresources.com/ — огромная база исходных текстов всевозможных Web-программ

Примеры ASP-кода для профессионалов

http://www.asptoday.com/search.asp?category=ASP Tricks — масса полезных советов для начинающих программировать на ASP

http://www.oreilly.com/catalog/aspnut/ — замечательная книга популярнейшей серии «In a Nutshell» всемирно известного издательства O’REILLY «ASP in a Nutshell A Desktop Quick Reference». На сайте бесплатно размещена одна из глав книги

http://www.chilisoft.net/ — версии ASP для различных платформ можно скачать с этого сайта

http://www.willcam.com/sql/ — введение в структурированный язык запросов SQL

SQL Reference and Example Site — хорошо структурированный материал по SQL

Анатомия ASP .NET. ASP .NET в действии

Проект на двух языках

Проект web -сайта состоит из страниц aspx и классов, которые используются на страницах (и, конечно, разнообразных ресурсов). Файлы с классами, к которым можно обратиться из разных страниц, помещают в специальную папку App_Code. При компиляции они помещаются в одну сборку — библиотеку DLL в формате portable executable. Совершенно неважно, на каком языке написан класс , если это язык . NET .

Илон Маск рекомендует:  Что такое код tiff

Готовые скомпилированные сборки сторонних производителей тоже можно использовать в проекте. Их помещают в папку Bin . При этом их необходимо импортировать в проект:

Создайте новый проект. Добавьте в него файл , выбрав тип файла Class и язык Visual Basic . Среда сама предложит поместить его в папку Code. Назовем его Custom >функция , которая добавляет слово Hello к имени, переданному в качестве параметра:

Добавьте в проект страницу CodeFolder_cs.aspx. Эта страница написана на C #, но она использует класс , написанный на VB . NET :

На странице определена форма, напоминающая форму Windows -приложения. На ней имеется кнопка, нажатие на которую обрабатывается в функции Button1_Click . В ней создается класс и вызывается его функция GetMessage с параметром, который берется из элемента редактирования. Возвращаемое значение записывается в элемент Label1 . В более простом варианте это выглядит так:

Класс может быть написан на C #, а использоваться из страницы на Visual Basic :

namespace sansys.net <

public class Blog: ISite <
// TODO: Сделать мир лучше
>

13 мая 2010 by Alexander Pascal


Директивы ASP.NET Pages

Недавно обнаружил для себя директиву —

1. @ Assembly Name =»assemblyname» %> || @ Assembly Src =»pathname» %> — директива подключения сборки на странице, для того чтобы страница имела доступ к классам и интерфейсам этой сборки во время компиляции.
Указывается название сборки или путь до файла (файл кода), содержащего описания нужных классов/интерфейсов
Как правило — все необходимые сборки подключаются в файле web . config , но не всегда нужно для всего проекта подрубать какие-либо сторонние компоненты

2. @ Implements Interface =»InterfaceName» %> — указывает, что текущая страница (или контрол) реализует указанный интерфейс, да и все :) хотя я обычно просто наследую необходимые страницы от нужных мне интерфейсов

3. @ Import Namespace =» Y ou N amespace» %> — импортирует namespace на страницу, т.е. то же что и using YouNamespace , но только на самой странице.
Как и при using все классы, интерфейсы, перечисления и т.п. будут доступны, но уже в части разметки! Это действительно удобно, когда нужный класс находится в слишком глубоком namespace

4. @ MasterType VirtualPath =»

/Masters/Simple.master”» %> — вот это зачетная вещь! если на странице указать в этой директиве путь в используемому мастерпейджу, то страница получит доступ ко всем свойствам мастер страницы при помощи классического свойства страницы Master , т.к. теперь это будет типизировання ссылка на Master Page .

а) создаем мастер страницу
б) добавляем в него свойство public string GetHi < get < return " Hi !"; >>
в) создаем страницу и указываем у нее наш мастерпейдж
г) в директиве MasterType также указываем путь к мастеру
д) теперь на странице можем просто получить доступ к свойству на мастер пейдже при помощи кода: Master . GetHi

Я думаю — это прикольная фича, а вы как считаете?

5. @ OutputCache Duration =»1000″ %> — управляет параметрами кеширования контрола/страницы, позволяет полностью закешировать контрол, так, что . net даже не будет его загружать на страницы, а лишь при рендеринге вставит на его место закешированный HTML . параметров там много, по этой теме можно даже отдельную статью сделать, в кратце как пользоваться можно почитать тут

6. @ Page Language =»C#» — уж с этой директивой все знакомы, но на всякий случай —
а) CodeFile указывает какой кодовый файл использовать для обработки событий
б) Inherits какой partial класс генерировать для страницы
в) Language =»C#» язык программирования
г) MasterPageFile =»../MasterPage.master» путь к мастер странице
д) Async =»true» асинхронная ли страница
е) ValidateRequest =»true» производить ли проверку посылаемых данных на безопасность (по умолчанию включена, в таком случае в TextBox html теги не введешь)
ж) Trace =»true» отображать ли информацию о сервере и загрузке контролов на странице

Думаю этих атрибутов для большинтсва случаев достаточно (маквалидацию не включил специально)

7. @ PreviousPageType VirtualPath =»

/Tabs.aspx» %> — как и с мастепейджом — эта директива позволяет нам использовать свойство PreviousPage как типизированную ссылку на страницу, с которого пришел PostBack на нашу (по умолчанию PreviousPage имеет тип Page )

8. @ Reference Page =»

/ Tabs . aspx » %> — определяет, что текущая страница имеет доступ к классу страницы или контрола, путь которого указан в соответствующем атрибуте.

Думаю удобно, если необходимо создать контрол динамически, или при FindControl привести найденый объект к соответствующему типу

9. @ Register assembly =»Org.Eurekaa.DNJ.UI» namespace =»Org.Eurekaa.DNJ.UI.WebControls» tagprefix =»dnj» %> — одна из самых частоиспользуемых директив на страницах, т.к. она позволяет нам прицепить на странице контрол по указанному пути, сборке, или namespase

Чтобы прицепить контрол по пути — нужно указать путь к нему в атрибуте Src , задать tagprefix и tagname , да и все в общем

чтобы заюзать контролы из сборки — достаточно как в примере указать сборку, пространство имен и TagPrefix , все классы пространства имен, являющиеся контролами становятся автоматически доступными на странице

Итак, вроде все рассмотрел, хотя и кратко, но думаю этого достаточно.
Как минимум — для себя открыл пару новых прикольных (хотя и врядли пригодящихся) директив, но бывают и нужны, например Import — на ashx хендлерах (хотя код можно вынести), или PreviousPageType — просто для удобства

Asp справочник по @ директивам

Table of Contents

Краткий обзор элементов C#

Типы данных, литералы и переменные

Введение в классы, объекты и методы

Массивы и строки

Подробнее о методах и классах

Индексаторы и свойства

Интерфейсы, структуры и перечисления

Обработка исключительных ситуаций

Применение средств ввода-вывода

Делегаты, события и лямбда-выражения

Пространства имен, препроцессор и сборки

Динамическая идентификация типов, рефлексия и атрибуты

Небезопасный код, указатели, обнуляемые типы и разные ключевые слова

Пространство имен System


Строки и форматирование

Многопоточное программирование. Часть первая: основы

Многопоточное программирование. Часть вторая: библиотека TPL

Коллекции, перечислители и итераторы

Сетевые средства подключения к Интернету

Приложение. Краткий справочник по составлению документирующих комментариев

ПОЛНОЕ РУКОВОДСТВО. С# 4.0

Глава 1. Создание C#

Глава 2. Краткий обзор элементов C#

Глава 3. Типы данных, литералы и переменные

Глава 4. Операторы

Глава 5. Управляющие операторы

Глава 6. Введение в классы, объекты и методы

Глава 7. Массивы и строки

Глава 8. Подробнее о методах и классах

Глава 9. Перегрузка операторов

Глава 10. Индексаторы и свойства

Глава 11. Наследование

Глава 12. Интерфейсы, структуры и перечисления

Глава 13. Обработка исключительных ситуаций

Глава 14. Применение средств ввода-вывода

Глава 15. Делегаты, события и лямбда-выражения

Глава 16. Пространства имен, препроцессор и сборки

Глава 17. Динамическая идентификация типов, рефлексия и атрибуты

Глава 18. Обобщения

Глава 20. Небезопасный код, указатели, обнуляемые типы и разные ключевые слова

Глава 21. Пространство имен System

Глава 22. Строки и форматирование

Глава 23. Многопоточное программирование. Часть первая: основы

Глава 24. Многопоточное программирование. Часть вторая: библиотека TPL

Глава 25. Коллекции, перечислители и итераторы

Глава 26. Сетевые средства подключения к Интернету

Приложение. Краткий справочник по составлению документирующих комментариев

ГЛАВА 1. Создание C

C# является основным языком разработки программ на платформе .NET корпорацииMicrosoft. В нем удачно сочетаются испытанныесредства программирования с самыми последними новшествами и предоставляется возможность для эффективногои очень практичного написания программ, предназначенных для вычислительной среды современных предприятий.Это, без сомнения, один из самых важных языков программирования XXI века.

Назначение этой главы — представить C# в его историческом контексте, упомянув и те движущие силы, которыеспособствовали его созданию, выработке его конструктивных особенностей и определили его влияние на другие языки программирования. Кроме того, в этой главе поясняетсявзаимосвязь С# со средой .NET Framework. Как станет ясноиз дальнейшего материала, C# и .NET Framework совместнообразуют весьма изящную среду программирования.Генеалогическое дерево C

Языки программирования не существуют в пустоте. Напротив, они тесно связаныдруг с другом таким образом, что на каждый новый язык оказывают в той или инойформе влияние его предшественники. Этот процесс сродни перекрестному опылению,в ходе которого свойства одного языка приспосабливаются к другому языку, полезныенововведения внедряются в существующий контекст, а устаревшие конструкции удаляются. Таким путем развиваются языки программирования и совершенствуется искусство программирования. И в этом отношении C# не является исключением.


У языка программирования C# «богатое наследство». Он является прямым наследником двух самых удачных языков программирования: С и C++. Он также имеет тесныеродственные связи с еще одним языком: Java. Ясное представление об этих взаимосвязях имеет решающее значение для понимания С#. Поэтому сначала определим, какоеместо занимает C# среди этих трех языков.Язык С — начало современной эпохи программирования

Создание С знаменует собой начало современной эпохи программирования. ЯзыкС был разработан Деннисом Ритчи (Dennis Ritchie) в 1970-е годы для программирования на мини-ЭВМ DEC PDP-11 под управлением операционной системы Unix. Несмотря на то что в ряде предшествовавших языков, в особенности Pascal, был достигнутзначительный прогресс, именно С установил тот образец, которому до сих пор следуют в программировании.

Язык С появился в результате революции в структурном программированиив 1960-е годы. До появления структурного программирования писать большие программы было трудно, поскольку логика программы постепенно вырождалась в так называемый «макаронный» код — запутанный клубок безусловных переходов, вызовов ивозвратов, которые трудно отследить. В структурированных языках программированияэтот недостаток устранялся путем ввода строго определенных управляющих операторов, подпрограмм с локальными переменными и других усовершенствований. Благодаря применению методов структурного программирования сами программы сталиболее организованными, надежными и управляемыми.

И хотя в то время существовали и другие структурированные языки программирования, именно в С впервые удалось добиться удачного сочетания эффективности,изящества и выразительности. Благодаря своему краткому, но простому синтаксисув сочетании с принципом, ставившим во главу угла программиста, а не сам язык, С быстро завоевал многих сторонников. Сейчас уже нелегко представить себе, что С оказался своего рода «струей свежего воздуха», которого так не хватало программистам.В итоге С стал самым распространенным языком структурного программированияв 1980-е годы.

Но даже у такого достойного языка, как С, имелись свои ограничения. К числу самых труднопреодолимых его ограничений относится неспособность справиться с большими программами. Как только проект достигает определенного масштаба, язык Стут же ставит предел, затрудняющий понимание и сопровождение программ при ихпоследующем разрастании. Конкретный предел зависит от самой программы, программиста и применяемых инструментальных средств, тем не менее, всегда существует»порог», за которым программа на С становится неуправляемой.Появление ООП и C++

Илон Маск рекомендует:  Метка элемента формы label

К концу 1970-х годов масштабы многих проектов приблизились к пределам, с которыми уже не могли справиться методики структурного программирования вообщеи язык С в частности. Для решения этой проблемы было открыто новое направлениев программировании — так называемое объектно-ориентированное программирование (ООП). Применяя метод ООП, программист мог работать с более «крупными»программами. Но главная трудность заключалась в том, что С, самый распространенный в то время язык, не поддерживал ООП. Стремление к созданию объектно-ориентированного варианта С в конечном итоге привело к появлению C++.

Язык C++ был разработан в 1979 году Бьярне Страуструпом (Bjarne Stroustrup), работавшим в компании Bell Laboratories, базировавшейся в Мюррей-Хилл, шт. Нью-Джерси. Первоначально новый язык назывался «С с классами», но в 1983 году он былпереименован в C++. Язык С полностью входит в состав C++, а следовательно, С служитоснованием, на котором зиждется C++. Большая часть дополнений, введенных Страуструпом, обеспечивала плавный переход к ООП. И вместо того чтобы изучать совершенно новый язык, программирующему на С требовалось лишь освоить ряд новыхсвойств, чтобы воспользоваться преимуществами методики ООП.

В течение 1980-х годов C++ все еще оставался в тени, интенсивно развиваясь, но к началу 1990-х годов, когда он уже был готов для широкого применения, его популярность в области программирования заметно возросла. К концу 1990-х годов он сталнаиболее широко распространенным языком программирования и в настоящее времяпо-прежнему обладает неоспоримыми преимуществами языка разработки высокопроизводительных программ системного уровня.

Часто задаваемые вопросы

Чем Directiva отличается от других таск — менеджеров?

Мы отличаемся прежде всего тем, что наше приложение предназначено для взаимодействия один на один, руководителя и ответственного за выполнение задачи.

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

Причём все это происходит при минимуме нажатий на экран. Также наше приложение изначально создавалось под телефон, потому что он всегда с собой и у руководителя, и у сотрудников компании.

Управление компанией всегда в ваших руках!

Какие управленческие принципы легли в основу сервиса?

Главный принцип: дублирование устных указаний в письменном виде.

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

На каких устройствах можно использовать приложение?

Directiva работает на iOS и Android. У нас не планируется работа на Windows mobile.

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

Для каких компаний Directiva подходит больше всего?

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

Мы же предлагаем простой инструмент для фиксации устных распоряжений, к которым легко обратиться в любою секунду. Потому что телефон всегда под рукой. Именно распространение недорогих смартфонов и сделало возможным применение такой управленческой технологии как Directiva.

Как Directiva влияет на внутреннюю эффективность компании?

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

В нашем приложении любой самый выдающийся сотрудник обязан использовать такие же процедуры ознакомления с задачей, как и все остальные. Это подчёркивает управленческую иерархию и четкое соблюдение ролей — руководитель и подчинённый. В итоге коэффициент «трения» резко снижается.

Можно ли использовать Directiva удаленно?

Конечно ДА! Можно создавать распоряжения поздно вечером, когда обычно приходит вдохновение к каждому руководителю. Можно в отпуске или командировке. Можно в режиме онлайн, а можно и в режиме оффлайн, например в самолёте.

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

Планируется ли развитие сервиса?

Мы считаем, что у руководителя компании малого бизнеса есть множество вопросов, информация о которых может хранится в его телефоне. Так что развитие сервиса однозначно будет, и пойдёт по пути максимальной полезности для предпринимателя.

Пусть он развивает свой бизнес, а мы ему поможем!

Directiva

Пользуйтесь Directiva в офисе, дома, в поездке. Для Вашего удобства доступны бесплатные приложения в магазинах App Store и Google Play. Отдавайте свои распоряжения, используя любой гаджет, находящийся под рукой.

Игорь Чакрыгин

ASP.NET — Подключение пользовательских элементов управления без директивы Register

В ASP.NET перед тем как использовать пользовательский элемент управления (User Control) на странице, его необходимо подключить при помощи директивы Register.


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

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

Пример

Для примера рассмотрим элемент управления Hello.ascx.

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

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

Тип элемента управления при этом должен остаться таким же. Это означает, что все свойства (в данном случае свойство Name) и методы должны быть доступны в коде как и прежде.

Решение

Для начала, в папке App_Code (можно вынести и в отдельную сборку) создадим файл IncludeAscx.cs c элементом управления IncludeAscx.

Он будет является своеобразной заглушкой, т.к. будет объявляться на странице как любой другой элемент управления, но создаваться вместо него будет элемент управления другого, нужного нам типа.

Для того, чтобы его можно было объявить на странице зарегистрируем его в файле Web.Config.

Для того, чтобы в момент компиляции изменить тип создаваемого элемента управления используем построитель элемента управления (Control Builder).

Создадим в папке App_Code файл IncludeAscxControlBuilder.cs с построителем элемента управления IncludeAscxControlBuilder.

Переопределим метод Init, который вызывается всякий раз, когда парсер страницы встречает тег серверного элемента управления (В нашем случае тег ). Из всех параметров данного метода интерес представляют только параметры parser, type и attribs.

Параметр attribs позволяет получить значения атрибутов тега, размещённого на странице. При помощи этого параметра мы получим значение атрибута AscxPath.

Параметр type определяет тип элемента управления, который будет создан. Значение этого параметра необходимо изменить до вызова базовой реализации метода Init.

Параметр parser может иметь один из трёх типов: PageParser, UserControlParser или MasterPageParser. Все они наследуются от класса BaseTemplateParser, который имеет метод GetUserControlType. Этот метод принимает абсолютный или относительный виртуальный путь, компилирует пользовательский элемент управления, который расположен по этому пути, добавляет ссылку на скомпилированную сборку и возвращает тип скомпилированного элемента управления, который мы и сохраняем в параметре type.

Стоит отметить, что построители элементов управления предоставляют широчайшие возможности для кодогенерации, однако все они тщательно скрыты от разработчика и доступ к ним можно получить только при помощи рефлексии. Увы, метод GetUserControlType не является исключением.

Всё готово. Теперь мы можем добавлять пользовательские элементы управления на страницу при помощи элемента управления IncludeAscx, как было показано выше.

Ложка дёгтя

Как я уже сказал выше, построители элементов управления предоставляют широчайшие возможности для кодогенерации. Редактор кода, который встроен в Visual Studio, поддерживает их в полной мере. Это означает, что любые изменения, которые выполняет построитель отражаются на подсветке синтаксиса и механизме IntelliSense.

В этом примере поле Hello будет иметь нужный нам тип и мы будем иметь доступ к его свойству Name, как будто элемент управления добавлен на страницу при помощи директивы Register.

К сожалению, вы будете лишены всего этого, если вы привыкли пользоваться ReSharper`ом. Он не умеет работать с построителями элементов управления и будет считать, что поле Hello имеет тип IncludeAscx и не имеет никакого свойства Name, хотя проект при этом будет нормально компилироваться.

Директива @Register в ASP.NET 2.0

Я использую следующую директиву на моей странице aspx:

И моя страница имеет фрагмент кода, подобный этому:

Но я получил следующую ошибку:

Ошибка Parser: ошибка при разборе ресурс, необходимый для обслуживания этого запроса. Просмотрите следующие подробные сведения об ошибке синтаксического анализа и изменить исходный файл соответственно.

Сообщение об ошибке Parser: неизвестный тег сервера. MyWebParts_tag: HelloWorldWebPart

Что случилось? Спасибо.

В вашей директиве реестра отсутствует информация о assembly или src .

Директивы препроцессора в Си

Препроцессор — это специальная программа, являющаяся частью компилятора языка Си. Она предназначена для предварительной обработки текста программы. Препроцессор позволяет включать в текст программы файлы и вводить макроопределения.
Работа препроцессора осуществляется с помощью специальных директив (указаний). Они отмечаются знаком решетка #. По окончании строк, обозначающих директивы в языке Си, точку с запятой можно не ставить.

Основные директивы препроцессора

#include — вставляет текст из указанного файла
#define — задаёт макроопределение (макрос) или символическую константу
#undef — отменяет предыдущее определение
#if — осуществляет условную компиляцию при истинности константного выражения
#ifdef — осуществляет условную компиляцию при определённости символической константы
#ifndef — осуществляет условную компиляцию при неопределённости символической константы
#else — ветка условной компиляции при ложности выражения
#elif — ветка условной компиляции, образуемая слиянием else и if
#endif — конец ветки условной компиляции
#line — препроцессор изменяет номер текущей строки и имя компилируемого файла
#error — выдача диагностического сообщения
#pragma — действие, зависящее от конкретной реализации компилятора.

Директива #include

Директива #include позволяет включать в текст программы указанный файл. Если файл является стандартной библиотекой и находится в папке компилятора, он заключается в угловые скобки <> .
Если файл находится в текущем каталоге проекта, он указывается в кавычках «» . Для файла, находящегося в другом каталоге необходимо в кавычках указать полный путь.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL