Asp динамический html


Содержание

Динамическое добавление HTML

04.04.2012, 23:05

Динамическое добавление html кода
Здравствуйте. Возник вопрос как в asp.net можно динамически добавлять html код на страницу к.

Динамическое добавление контролов
Клипаю что-то наподобие сайта с новостями. Нужно добавить возможность добавления изображений к.

Динамическое добавление календаря
Добрый день! По щелчку кнопки добавляю на страницу календарь public partial class.

Динамическое добавление контролов!
Здравствуйте Уважаемые!Меня интересует вопрос, как при динамическом добавлении контролов, вставить.

Добавление динамического контента в представление Razor

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

Таблица 18-2: Способы добавления динамического контента в представления

Способ Используется для
Код Используется для создания небольших, независимых частей логики представления, например, операторы if или foreach . Это основной способ создания динамического контента в представлении, и на нем основаны некоторые другие подходы. Мы рассмотрели его в главе 5 и уже использовали во многих примерах в других главах.
Вспомогательные методы HTML Используются для создания одного элемента HTML или небольшой коллекции элементов, обычно на основании данных модели представления или объекта ViewData . Можно использовать встроенные вспомогательные методы MVC Framework, можно также создавать свои собственные. Вспомогательные методы HTML рассматриваются в главе 19.
Секции Используются для разбиения контента на блоки, которые будут вставлены в макет в определенных местах.
Частичные представления Используются для включения подсекции разметки в несколько представлений. Частичные представления могут содержать код, вспомогательные методы HTML и ссылки на другие частичные представления. Частичные представления не могут вызывать методы действий, поэтому их нельзя использовать для выполнения бизнес-логики.
Дочерние действия Используются для создания повторно используемых элементов управления UI и виджетов, в которых необходима бизнес-логика. Дочернее действие вызывает метод действия, визуализирует представление и внедряет результат в поток ответа.

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

Используем секции

Движок Razor поддерживает концепцию секций, которые позволяют выделять различные области в макете. Секции Razor позволяют разбивать представление на части и контролировать то, где они внедряются в макет. Чтобы продемонстрировать работу секций, мы отредактировали файл /Views/Home/Index.cshtml , как показано в листинге 18-16.

Листинг 18-16: Определяем секцию в представлении

Секции определяются с помощью тега Razor @ , за которым следует имя секции. В нашем примере их две — Header и Footer . Их содержание представляет собой обычную смесь разметки HTML и тегов Razor.

Чтобы указать, где в макете должны отображаться секции, используется вспомогательный метод @RenderSection . В листинге 18-17 показаны изменения, которые мы внесли в файл

Движок представлений все еще использует наши пользовательские адреса поиска, что означает, что макеты находятся в папке /Views/Shared , а представления — в /Views/Common .

Листинг 18-17: Используем секции в макете

Когда Razor анализирует макет, он заменяет вспомогательный метод RenderSection на содержимое секции представления с указанным именем. Те части представления, которые не содержатся в секциях, вставляются в макет с помощью вспомогательного метода RenderBody .

Чтобы увидеть работу секций, запустите приложение, как показано на рисунке 18-6. Мы добавили некоторые базовые стили CSS, чтобы было понятно, какие из выведенных секций принадлежат представлению и какие — макету. Результат выглядит незамысловато, но он демонстрирует, как можно внедрить части контента представления в макет в заданной последовательности.

Рисунок 18-6: Используем секции в представлении, чтобы внедрить контент в макет

В представлении можно определить только те секции, на которые есть ссылки в макете. При попытке определить в представлении секции, для которых нет соответствующего вызова вспомогательного метода @RenderSection в макете, MVC Framework выбросит исключение.

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

Листинг 18-18: Определяем представление с помощью секций Razor

Мы считаем, что такой подход позволяет создавать более понятные представления и снижает вероятность того, что RenderBody захватит посторонний контент. Чтобы его применить, мы должны заменить вызов вспомогательного метода RenderBody на RenderSection(«Body») , как показано в листинге 18-19.

Листинг 18-19: Определяем представление с помощью RenderSection(«Body»)

Тестирование секций

Вы можете проверить, определена ли в представлении какая-либо секция из макета. Это делается для того, чтобы предоставить контент по умолчанию для этой секции, если она отсутствует в представлении и мы по каким-то причинам не хотим ее там определять. Мы изменили файл _Layout.cshtml , чтобы проверить, определена ли в нем секция Footer , как показано в листинге 18-20.

Листинг 18-20: Проверяем наличие секции Footer в представлении

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

Визуализируем дополнительные секции

По умолчанию в представлении должны быть определены все секции, к которым в макете имеются вызовы RenderSection . Если секции отсутствуют, MVC Framework покажет пользователю исключение. Чтобы продемонстрировать это, мы добавили в файл _Layout.cshtml новый вызов RenderSection к секции под названием scripts , как показано в листинге 18-21 (это секция, которую Visual Studio добавляет в макет по умолчанию для проектов на шаблоне Basic , но которую мы удалили в самом начале).

Листинг 18-21: Добавляем в макет вызов RenderSection , для которого нет соответствующей секции в представлении

Если мы запустим приложение и движок Razor попытается визуализировать макет и представление, то увидим ошибку, показанную на рисунке 18-7.

Рисунок 18-7: Ошибка, которая появляется в случае отсутствия секции

Вы можете использовать метод IsSectionDefined , чтобы избежать вызовов RenderSection к секциям, не определенным в представлении, но для этого есть более элегантный подход: передавать дополнительное значение false в метод RenderSection , как показано в листинге 18-22.

Листинг 18-22: Делаем секцию необязательной

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

Используем частичные представления

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

Создаем частичное представление

Для начала создадим частичное представление под названием MyPartial . Для этого кликните правой кнопкой мыши по папке /Views/Shared , выберите из контекстного меню Add — View и отметьте флажком опцию Create as Partial View , как показано на рисунке 18-8.

Рисунок 18-8: Создаем частичное представление

Сразу после создания оно будет пустым, и мы добавим в него содержимое, показанное в листинге 18-23.

Листинг 18-23: Файл MyPartial.cshtml

Мы хотим продемонстрировать, как можно смешивать HTML-разметку и теги Razor, поэтому мы определили в нем простое сообщение и вызов к вспомогательному методу ActionLink .


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

/Views/Common/List.cshtml , как показано в листинге 18-24.

Листинг 18-24: Используем частичное представление

Имя файла представления указывается без расширения. Движок представлений будет искать указанное частичное представление по обычным адресам поиска, то есть при визуализации представления для контроллера Home — в папках /Views/Home и /Views/Shared . (Мы установили переменной Layout значение null , так что теперь нам не нужно указывать секции, которые использовались ранее в этой главе.)

Движок представлений Razor ищет частичные представления так же, как и обычные (в папках

/Views/Shared ). Это значит, что можно создавать специализированные версии частичных представлений для конкретных контроллеров и переопределять частичные представления с одинаковыми именами в папке Shared . Хотя последняя функция может показаться странной, она очень удобна, потому что чаще всего частичные представления используются для визуализации контента в макете.

Вы можете увидеть вывод частичного представления, запустив приложение и перейдя по ссылке /Home/List , как показано на рисунке 18-9.

Рисунок 18-9: Вывод частичного представления

С помощью вызова вспомогательного метода ActionLink в частичном представлении мы получаем из обрабатываемого запроса информацию о контроллере. Это значит, что если мы указываем метод Index , элемент a будет относиться к контроллеру Home , так как именно этот контроллер вызывает визуализацию частичного представления. Если мы используем частичные представления в представлении, которое визуализируется другим контроллером, то ActionLink сгенерирует ссылку на этот контроллер. Мы вернемся к вспомогательным методам HTML в главе 19.

Используем строго типизированные частичные представления

Можно также создать строго типизированное частичное представление, а затем передавать в него объекты моделей представлений, которые оно будет визуализировать. Чтобы это продемонстрировать, мы создали новое строго типизированное частичное представление под названием MyStronglyTypedPartial.cshtml в папке /Views/Shared . Оно создается практически так же, как и обычное частичное представление, только нужно выбрать или ввести с клавиатуры тип для опции Model class , как показано на рисунке 18-10. Мы использовали тип IEnumerable .

Рисунок 18-10: Создаем строго типизированное частичное представление

В листинге 18-25 показаны дополнения в файле частичного представления, который был создан Visual Studio. Изначально он содержит только тег модели @ , который указывает тип модели представления.

Листинг 18-25: Создаем строго типизированное частичное представление

Мы отображаем содержимое объекта модели представления как список HTML с помощью тега Razor @foreach . Чтобы продемонстрировать работу этого частичного представления, мы обновили файл /Views/Common/List.cshtml , как показано в листинге 18-26.

Листинг 18-26: Используем строго типизированное частичное представление

Отличие от предыдущего примера заключается в том, что здесь мы передаем дополнительный аргумент во вспомогательный метод Partial , который определяет объект модели представления. Чтобы увидеть, как работает это строго типизированное частичное представление, запустите приложение и перейдите по ссылке /Home/List , как показано на рисунке 18-11.

Рисунок 18-11: Используем строго типизированное частичное представление

Используем дочерние действия

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

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

Создаем дочернее действие

Любое действие можно использовать как дочернее. Чтобы продемонстрировать работу дочерних действий, мы добавили новый метод действия в контроллер Home , как показано в листинге 18-27.

Листинг 18-27: Добавляем дочернее действие в контроллер Home

Наш метод действия называется Time и визуализирует частичное представление, вызывая метод PartialView (о котором мы рассказывали в главе 15). Атрибут ChildActionOnly гарантирует, что метод действия может быть вызван только как дочернее действие из представления. Хотя метод действия может использоваться как дочерний и без этого атрибута, мы всегда применяем ChildActionOnly , чтобы данный метод невозможно было вызвать на запрос пользователя.

После определения метода действия нам нужно создать частичное представление, которое он будет визуализировать. Дочерние действия обычно связываются с частичными представлениями, хотя это и необязательно. В листинге 18-28 показано представление /Views/Home/Time.cshtml , которое мы создали для работы с нашим дочерним действием. Это строго типизированное частичное представление, моделью которого является объект DateTime .

Листинг 18-28: Частичное представление для дочернего действия

Визуализируем дочернее действие

Дочернее действие вызывается вспомогательным методом Html.Action . После данного вызова выполняется метод действия, обрабатывается ViewResult , и вывод внедряется в ответ клиенту. В листинге 18-29 показаны изменения, которые мы внесли в файл /Views/Common/List.cshtml , чтобы визуализировать дочернее действие.

Листинг 18-29: Вызов дочернего действия из представления List

Вы можете увидеть вывод дочернего действия, запустив приложение и снова перейдя по ссылке /Home/List , как показано на рисунке 18-12.

Рисунок 18-12: Используем дочернее действие

Вспомогательному методу Action , который был вызван в листинге 18-29, мы передали параметр с именем вызываемого метода действия. MVC Framework будет искать метод действия в контроллере, который обрабатывает текущий запрос. Чтобы вызвать метод действия из другого контроллера, передайте в параметр его имя, например:

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

можно вызвать из представления следующим образом:

Описание динамических и статических форматов HTML

Читайте также:

  1. I. Описание биотопа
  2. II. Описание фитоценоза
  3. III. Описание лабораторной установки
  4. IV. Характеристика и описание заданий на СРС 1. Презентация
  5. Актуальность проблемы комплексного физико-математического и численного моделирования теплогидрогазодинамических процессов
  6. Актуальность проблемы комплексного физико-математического и численного моделирования теплогидрогазодинамических процессов в технологии транспорта нефти и газа
  7. Аналитическое библиографическое описание (описание составной
  8. Библиографическое описание
  9. Библиографическое описание документа
  10. Библиографическое описание документа. Библиографическая запись.
  11. Библиографическое описание неопубликованных документов 1 страница
  12. Библиографическое описание неопубликованных документов 2 страница

В зависимости от потребностей приложения определяется, какой формат файла HTML следует использовать. Статический формат HTML используется, если данные изменяются редко, и для приложения Web не использует формы. Динамический формат используется, если часто происходит изменение данных, а данные базы данных Microsoft Access должны находится и извлекаться из приложения Web с помощью форм.

Использование приложением Web статического формата HTML

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

Использование приложением Web динамических файлов IDC/HTX

При преобразовании объектов в формат файлов IDC/HTX автоматически вместо файлов с расширением .html создаются файлы с расширением HTML (.htx).и файлы Internet Database Connector (.idc). Библиотека Internet Database Connector (httpodbc.dll) является частью продукта Microsoft Internet Information Server.

Файл с расширением .idc содержит запрос в форме инструкции SQL и данные, используемые Microsoft Internet Information Server для связи с источником данных ODBC, в данном случае, с базой данных Microsoft Access 97. Данные о связи включают название источника данных, а также имя пользователя и пароль, если для открытия базы данных используется защита на уровне пользователей.

Файл с расширением .htx является файлом в формате HTML и содержит команды и инструкции по форматированию, а вместо данных содержит шаблоны, указывающие место вставки значений из запроса в файле с расширением .idc.


После публикации базы данных и установки приложения Web, Microsoft Internet Information Server, используя средство просмотра Web, открывает базу данных Microsoft Access (с помощью драйвера рабочего стола Microsoft Access и данных о связи файла с расширением .idc), запускает запрос в файле .idc для доступа к данным, объединяет результаты и данные файла .htx в один файл с расширением .html, а затем отправляет файл .html обратно в средство просмотра Web для его отображения в виде страницы Web.

Использование приложением Web динамических файлов ASP

При преобразовании объектов в динамический формат файлов ASP автоматически вместо файлов с расширением .html создается файл страницы сервера ActiveX (.asp). Сервер ActiveX входит в состав Microsoft Internet Information Server версии 3.0 и выше.

Файл с расширением .asp содержит команды HTML, а также один или несколько запросов в форме инструкций SQL, инструкции форматирования шаблонов и программы VBScript, включающие ссылки на элементы управления сервера ActiveX. Также файл с расширением .asp содержит сведения о связи ODBC, используемые для связи с источником данных, в этом случае с базой данных Microsoft Access 97. Сведения о связи включают имя источника данных, а также имя пользователя и пароль, если для входа в базу данных предусмотрена защита на уровне пользователей.

После публикации базы данных и установки приложения Web сервер Microsoft Internet Information Server по запросу от средства просмотра Web выполняет программы VBScript, вызывает элементы управления сервера ActiveX, открывает базу данных Microsoft Access (с помощью драйвера рабочего стола Microsoft Access и данных о связи файла с расширением .idc), запускает запросы в файле. idc для доступа к данным, объединяет результаты и данные файла .htx в один файл с расширением .html, а затем отправляет файл .html обратно в средство просмотра Web для его отображения в виде страницы Web.

Экспорт объекта в режиме таблицы в статический формат HTML

1В окне базы данных укажите имя таблицы, запроса или формы, а затем в меню Файл выберите команду Сохранить как/Экспорт.

2В диалоговом окне Сохранение объекта выберите параметр Во внешнем файле или базе данных и нажмите кнопку OK.

3В поле Тип файла установите значениеДокументы HTML (*.html;*.htm).

4Рядом с полем Папка нажмите кнопку раскрытия списка и выберите диск или папку, в которую необходимо экспортировать таблицу.

5В поле Имя файла введите имя файла.

6Установите флажок Сохранить формат, если таблицу необходимо сохранить в формате, близком ее внешнему виду в режиме таблицы, установите флажок Автозагрузка, и после нажатия кнопки Экспорт(см. шаг 7) на экран будет выведено диалоговое окно Параметры вывода в формате HTML.

Флажок Автозагрузка устанавливается для отображения результатов в установленном по умолчанию средстве просмотра Web.

7Нажмите кнопку Экспорт.

8Если в шаге 6 был установлен флажок Сохранить формат, то на экран будет выведено диалоговое окно Параметры вывода в формате HTML. Там можно определить шаблон HTML. Для получения дополнительных сведений нажмите кнопку . Также можно установить используемый по умолчанию параметр Шаблон HTML. Для этого в меню Сервис выберите команду Параметры и перейдите к вкладке Гиперссылки/HTML.

Примечания

·Файл HTML создается на основе набора записей для объекта в режиме таблицы, включая значения его свойств Порядок сортировки (OrderBy) и Фильтр (Filter).

·Если таблица содержит запрос с параметрами, то сначала происходит поиск значений параметров, а затем экспорт результатов.

·Если в шаге 6 был установлен флажок Сохранить формат, то таблица в формате HTML повторяет внешний вид исходной таблицы, создавая команды HTML для подбора соответствующих атрибутов (таких как цвет, шрифт, выравнивание).

·Значения большинства полей (за исключением полей объектов OLE и гиперссылок) отображаются в виде строк и имеют тот же формат, что и в таблице, включая настройки свойств Формат поля (Format) или Маска ввода (InputMask).

·Поля с типом данных гиперссылки отображаются в виде связей HTML с помощью команд .

·По умолчанию все неформатированные типы данных, за исключением текстовых и MEMO, сохраняются с выравниванием по правому краю. Текстовые поля и поля MEMO по умолчанию сохраняются с выравниванием по левому краю.

·Если размеры таблицы достаточно велики, то ее вывод на экран и отображение через средство просмотра Web может занять значительное время. Возможно, следует сократить размер таблицы, разделив ее на несколько таблиц меньшего размера с помощью условия отбора, например по полю даты, или использовать отчет или форму для просмотра данных.

Экспорт объекта в режиме таблицы в динамический формат HTML

1В окне базы данных укажите имя таблицы, запроса или формы, а затем в меню Файл выберите команду Сохранить как/Экспорт.

2В диалоговом окне Сохранение объекта выберите параметр Во внешнем файле или базе данных и нажмите кнопку OK.

3В поле Тип файла установите значение Microsoft IIS 1-2 (*.htx;*.idc) или Microsoft ActiveX Server (*.asp), в зависимости от требуемого динамического формата HTML. Для получения дополнительных сведений нажмите кнопку .

4Рядом с полем Папка нажмите кнопку раскрытия списка и выберите диск или папку, в которую необходимо экспортировать таблицу.

5В поле Имя файла введите имя файла.

6Нажмите кнопку Экспорт.

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

Необходимо указать компьютер или имя файла источника данных, которые будут использованы на сервере Web, а также для входа в базу данных может потребоваться ввод имени пользователя и пароля. При экспорте данных в формат файла ASP необходимо ввести адрес URL сервера, где на сервере Web будет расположен файл ASP. Например, если файлы ASP находятся в папке \SalesApp на сервере \\Pubweb, необходимо ввести http://pubweb//salesapp/. Для получения дополнительных сведений о динамическом формате нажмите кнопку .

В диалоговом окне Параметры вывода в формате HTMLдля каждого параметра можно указать значения, используемые по умолчанию. Для этого в меню Сервис выберите команду Параметры, а затем перейдите к вкладке Гиперсылки/HTML.

Примечания

·Файл в формате HTML основан на настройках таблицы, включая свойства Порядок сортировки (OrderBy) и Фильтр (Filter).

·Если объект в режиме таблицы содержит запрос с параметрами, то Microsoft Access имитирует диалоговое окно Введите значение параметра. Для этого создается дополнительная страница параметров HTML, содержащая элемент управления текстовым полем формы HTML для ввода значения параметра и кнопку для запуска запроса. Страница параметров HTML должна быть выведена на экран до страницы таблицы в формате HTML в приложении Web. Если используется мастер публикации в Web и определена страница кнопочной формы, то в нее будет добавлена страница параметров HTML. Во время экспорта Microsoft Access выполняет запрос и выводит на экран окно Введите значение параметра, но в нем достаточно просто нажать кнопку OK, поскольку любой ввод данных будет проигнорирован.

·Выходные файлы с максимальной точностью воспроизводят внешний вид объекта в режиме таблицы, создавая команды HTML для подбора соответствующих атрибутов (таких как цвет, шрифт, выравнивание).

·Значения большинства полей (за исключением полей объектов OLE и гиперссылок) отображаются в виде строк и имеют тот же формат, что и в таблице, включая настройки свойств Формат поля (Format) или Маска ввода (InputMask).

·Поля с типом данных гиперссылки отображаются в виде связей HTML с помощью команд .

·По умолчанию все неформатированные типы данных, за исключением текстовых и полей МЕМО, сохраняются с выравниванием по правому краю. Текстовые поля и поля MЕМО по умолчанию сохраняются с выравниванием по левому краю.

·При экспорте в формат файла ASP, если форма находится в режиме таблицы или в ячейке свойства Режим по умолчанию (Default View) для этой формы установлено значение Таблица, то форма отображается на экране в виде таблицы. Если же форма находится в режиме формы или в режиме конструктора, либо если в ячейке свойства Режим по умолчанию (Default View) для этой формы установлены значения Простая форма илиЛенточная форма, то форма отображается на экране в виде формы.

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

·Если размеры таблицы достаточно велики, то ее вывод на экран и отображение через средство просмотра Web может занять значительное время. Возможно, следует сократить размер таблицы, разделив ее на несколько таблиц меньшего размера с помощью такого условия отбора, как поле даты, или использовать отчет или форму для просмотра данных.

Дата добавления: 2014-11-29 ; Просмотров: 309 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Знакомство с веб-страниц ASP.NET — основы форм HTML Introducing ASP.NET Web Pages — HTML Form Basics


Мы продемонстрируем основы как создать форму ввода и как обрабатывать ввод пользователя, при использовании веб-страниц ASP.NET (Razor). This tutorial shows you the basics of how to create an input form and how to handle the user’s input when you use ASP.NET Web Pages (Razor). И теперь, когда у вас есть базы данных, вы используете свои навыки формы пользователям найти определенные фильмов в базе данных. And now that you’ve got a database, you’ll use your form skills to let users find specific movies in the database. Предполагается, вы выполнили рядов через введение для отображения данных с помощью ASP.NET Web Pages. It assumes you have completed the series through Introduction to Displaying Data Using ASP.NET Web Pages.

Вы узнаете, как: What you’ll learn:

  • Как создать форму с помощью стандартных элементов HTML. How to create a form by using standard HTML elements.
  • Как считать пользователя входных в форме. How to read the user’s input in a form.
  • Предоставляет способ создания SQL-запрос, что выборочно получает данные с помощью поиска терминов, пользователь. How to create a SQL query that selectively gets data by using a search term that the user supplies.
  • Как у поля, на странице «запомнить» ввод пользователя. How to have fields in the page «remember» what the user entered.

Функции и технологии: Features/technologies discussed:

  • Объект Request . The Request object.
  • SQL Where предложение. The SQL Where clause.

Что вы создадите What You’ll Build

В предыдущем учебном курсе, создали базу данных, добавления данных к нему и затем используется WebGrid вспомогательный метод для отображения данных. In the previous tutorial, you created a database, added data to it, and then used the WebGrid helper to display the data. В этом руководстве вы добавите поле поиска позволяет находить фильмы из определенного жанра или заголовки которых содержит любое слово, вводе. In this tutorial, you’ll add a search box that lets you find movies of a specific genre or whose title contains whatever word you enter. (Например, вы сможете найти все фильмы жанрах «Action» или заголовки которых содержит «Гарри» или «Adventure.») (For example, you’ll be able to find all movies whose genre is «Action» or whose title contains «Harry» or «Adventure.»)

Когда все будет готово к этому учебнику, вы получите страницу следующего вида: When you’re done with this tutorial, you’ll have a page like this one:

Листинг часть страницы совпадает с последнего курса — сетки. The listing part of the page is the same as in the last tutorial — a grid. Отличие может быть, что в сетке перечислены все фильмы только что вы искали. The difference will be that the grid will show only the movies that you searched for.

О HTML-формы About HTML Forms

(Если у вас есть опыт создания HTML-формы и с той разницей между GET и POST , этот раздел можно пропустить.) (If you’ve got experience with creating HTML forms and with the difference between GET and POST , you can skip this section.)

Форма содержит элементы пользовательского ввода — текстовые поля, кнопки, переключатели, флажки, раскрывающиеся списки и т. д. A form has user input elements — text boxes, buttons, radio buttons, check boxes, drop-down lists, and so on. Пользователи заполнить эти элементы управления или сделайте выбор и затем отправить форму нажатием кнопки. Users fill in these controls or make selections and then submit the form by clicking a button.

В этом примере показана базовый синтаксис HTML формы. The basic HTML syntax of a form is illustrated by this example:

При запуске этой разметки на странице создается простая форма, которая выглядит как на этом рисунке: When this markup runs in a page, it creates a simple form that looks like this illustration:

Эта разметка создает форму, которая содержит текстовое поле с именем searchGenre и кнопка отправки. This markup creates a form that has a text box named searchGenre and a submit button. Текст поле и отправить кнопку заключаются в элемента): Inside the element):

Код для обработки этого поиска аналогичен коду для поиска жанра, за исключением того, что у вас есть сборка LIKE поиска. The code to handle this search is similar to the code for the genre search, except that you have to assemble the LIKE search. Внутри блока кода в верхней части страницы, добавьте это if блокировать сразу после if блок для поиска Жанр: Inside the code block at the top of the page, add this if block just after the if block for the genre search:

Этот код использует ту же логику, вы уже видели, за исключением того, что при поиске используются LIKE оператор и помещает код » % » до и после поисковому запросу. This code uses the same logic you saw earlier, except that the search uses a LIKE operator and the code puts » % » before and after the search term.

Обратите внимание на то, как оно было просто добавить другой поиска на страницу. Notice how it was easy to add another search to the page. Все, что нужно было сделать был: All you had to do was:

  • Создание if блок, проверяется ли поле соответствующие поиска имело значение. Create an if block that tested to see whether the relevant search box had a value.
  • Задайте selectCommand переменных для новой инструкции SQL. Set the selectCommand variable to a new SQL statement.
  • Задайте searchTerm переменной на значение для передачи запросу. Set the searchTerm variable to the value to pass to the query.

Вот законченный блок кода, содержащий новый логику для поиска title: Here’s the complete code block, which contains the new logic for a title search:

Вот Сводка того, что делает этот код: Here’s a summary of what this code does:

  • Переменные searchTerm и selectCommand инициализируются вверху. The variables searchTerm and selectCommand are initialized at the top. Вы собираетесь задать эти переменные для соответствующих поисковому запросу (если таковые имеются) и соответствующей командой SQL в соответствии действия пользователя на странице. You’re going to set these variables to the appropriate search term (if any) and appropriate SQL command based on what the user does in the page. Поиск по умолчанию — это простой пример получения всех фильмов из базы данных. The default search is the simple case of getting all the movies from the database.
  • В тестах для searchGenre и searchTitle , код задает searchTerm на нужное значение для поиска. In the tests for searchGenre and searchTitle , the code sets searchTerm to the value you want to search for. Эти блоки кода также задать selectCommand в соответствующую команду SQL для поиска. Those code blocks also set selectCommand to an appropriate SQL command for that search.
  • db.Query Метод вызывается только один раз, с помощью какой угодно командой SQL находится в selectedCommand и значение searchTerm . The db.Query method is invoked only once, using whatever SQL command is in selectedCommand and whatever value is in searchTerm . Если условие поиска не задано (не жанр и отсутствие слов title), значение searchTerm представляет собой пустую строку. If there is no search term (no genre and no title word), the value of searchTerm is an empty string. Тем не менее, не имеет значения, так как в этом случае запрос не требует параметра. However, that doesn’t matter, because in that case the query doesn’t require a parameter.

Тестирование функции поиска Title Testing the Title Search Feature

Теперь можно протестировать страницу завершения поиска. Now you can test your completed search page. Запустите Movies.cshtml. Run Movies.cshtml.

Введите жанр фильма и нажмите кнопку жанр поиска. Enter a genre and click Search Genre. В сетке отображаются фильмы из этого жанра, как и до. The grid displays movies of that genre, like before.

Введите слово заголовка и нажмите кнопку заголовок поиска. Enter a title word and click Search Title. В сетке отображаются фильмы, содержащие это слово в заголовок. The grid displays movies that have that word in the title.

Не указывайте оба поля и щелкните одну из кнопок. Leave both text boxes blank and click either button. В сетке отображаются все фильмы. The grid displays all the movies.

Объединение запросов Combining the Queries

Можно заметить, что поисковые запросы, которые можно выполнять являются взаимоисключающими. You might notice that the searches you can perform are exclusive. Не удается найти название и жанр в то же время, даже если оба поля поиска значений в них. You can’t search the title and the genre at the same time, even if both search boxes have values in them. Например нельзя выполнять поиск для всех фильмов действие, заголовок которого содержит «Adventure». For example, you can’t search for all action movies whose title contains «Adventure». (Как страницы используется в коде, при вводе значения для жанр и title, поиск заголовка получает приоритет). Чтобы создать поиска, которая объединяет условия, пришлось бы создать запрос SQL, который имеет следующий синтаксис: (As the page is coded now, if you enter values for both genre and title, the title search gets precedence.) To create a search that combines the conditions, you would have to create a SQL query that has syntax like the following:

SELECT * FROM Movies WHERE Genre = @0 AND Title LIKE @1

И необходимо выполнить запрос с помощью инструкции, как показано ниже (примерно говоря): And you’d have to run the query by using a statement like the following (roughly speaking):

var selectedData = db.Query(selectCommand, searchGenre, searchTitle);

Создание логики для многих вариантов условия поиска можно получить немного сложной, как вы видите. Creating logic to allow many permutations of search criteria can get a bit involved, as you can see. Таким образом мы остановим здесь. Therefore, we’ll stop here.

В ближайшее время Coming Up Next

В следующем руководстве вы создадите страницы, использующей формы пользователи смогут добавлять видео в базу данных. In the next tutorial, you’ll create a page that uses a form to let users add movies to the database.

Asp динамический html

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

В этом разделе содержатся следующие подразделы.

Формирование шаблонов — это автоматическое создание веб-страниц для каждой таблицы в базе данных с помощью элементов платформы динамических данных. На этих автоматически сформированных веб-страницах реализованы операции создания, считывания, обновления и удаления (CRUD) для каждой таблицы. Формирование шаблонов включает в себя шаблоны страниц, шаблоны страниц сущностей и полей, а также шаблоны фильтров. Эти шаблоны позволяют быстро создать функциональный веб-сайт, управляемый данными.

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

Функция формирования шаблонов имеет следующие преимущества:


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

Функциональные страницы создаются автоматически и обеспечивают для базы данных функции CRUD, сортировку и разбиение на страницы.

Функция маршрутизации ASP.NET (маршрутизация URL-адресов) автоматически обрабатывает запросы. Функция динамических данных получает используемый шаблон и таблицу из URL-адреса запроса.

Встроенная проверка данных на основе схемы базы данных.

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

Внешний вид и поведение полей данных легко настраиваются.

Веб-сайт на платформе динамических данных ASP.NET можно создать в Visual Studio 2010 с использованием шаблона Веб-узел Dynamic Data . Дополнительные сведения см. в разделе Пошаговое руководство. Создание нового веб-узла, использующего формирование шаблонов . Дополнительные сведения о структуре проекта веб-сайта, использующего формирование шаблонов, см. в разделе Инфраструктура платформы динамических данных ASP.NET .

Включение механизма формирования шаблонов

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

Возможны следующие подходы к включению механизма формирования шаблонов.

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

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

Включение механизма формирования шаблонов для отдельного поля данных. Для этого используется атрибут ScaffoldColumnAttribute .

Функция динамических данных по умолчанию применяет следующие правила в соответствующем порядке для определения необходимости отображения поля данных.

Если к полю данных применен атрибут ScaffoldColumnAttribute , то оно отображается. Это правило переопределяет все перечисленные ниже правила.

Если к полю данных применен атрибут UIHintAttribute , то оно отображается. Это правило переопределяет все перечисленные ниже правила.

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

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

Если значением свойства IsCustomProperty является true , то поле данных не отображается.

Функция динамических данных использует шаблоны страниц для отображения страниц и предоставления возможностей CRUD. Шаблоны являются страницами ASP.NET (расширение ASPX). При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\PageTemplates. В этой папке содержатся шаблоны страниц по умолчанию. Разработчик может изменить шаблоны страниц по умолчанию или создать новые шаблоны для задания способа отображения таблиц.

Шаблоны страниц по умолчанию

Шаблоны страниц по умолчанию имеют следующие функции.

Они используют главную страницу Site.master, которая расположена в корневой папке веб-приложения. Главная страница определяет таблицы стилей и простой заголовок. Кроме того, она содержит элемент управления ScriptManager , который позволяет включить функцию Ajax. Для отладки может понадобиться отключить частичное обновление страниц путем установки для свойства EnablePartialRendering элемента управления ScriptManager значения false .

Все шаблоны страниц содержат элемент управления UpdatePanel для поддержки частичного отображения без обратной передачи. Дополнительные сведения см. в разделе Общие сведения об элементе управления UpdatePanel .

Все шаблоны страниц содержат элемент управления DynamicDataManager . Этот элемент управления обеспечивает динамическое поведение для элементов управления источником данных, а также для элементов управления шаблона, связанных с данными.

В следующей таблице перечислены шаблоны страниц платформы динамических данных по умолчанию.

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

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

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

Выводит список строк из таблицы базы данных. Этот шаблон используется по умолчанию для отображения таблицы. Этот шаблон предоставляет элементы управления DropDownList , которые позволяют пользователям фильтровать и сортировать данные, а также разбивать их на страницы. Он использует элемент управления GridView .

Выводит список строк из таблицы базы данных. Шаблон позволяет пользователям фильтровать и сортировать данные, а также разбивать их на страницы. Для списка строк используется элемент управления GridView , а для выбранной строки и вставки новой записи — элемент управления DetailsView .

Этот шаблон обеспечивает функциональность «все в одном». Платформа динамических данных не использует его по умолчанию. Разработчик может изменить конфигурацию в файле Global.asax для использования этого шаблона вместо отдельных шаблонов для различных операций (например, List.aspx и Edit.aspx).

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

Шаблоны полей по умолчанию

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

При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\FieldTemplates. Эта папка содержит шаблоны полей по умолчанию. Разработчик может изменить шаблоны полей по умолчанию или создать новые шаблоны для задания способа отображения отдельных полей данных.

В следующей таблице описываются шаблоны полей по умолчанию в проектах на платформе динамических данных ASP.NET.

Шаблон поля по умолчанию

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

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

Отображает поля, имеющие связь «один ко многим», и перенаправляет пользователя на дочернюю страницу. Обеспечивает отображение элемента управления HyperLink .

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

Отображает тип данных DateTime в виде текста с помощью элемента управления Literal .

Позволяет пользователям редактировать данные DateTime с помощью элемента управления TextBox . Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то этот элемент управления также обеспечивает визуализацию элемента управления RequiredFieldValidator . Шаблон поля DateTime_Edit.ascx предоставляет элемент управления System.Web.DynamicData.DynamicValidator , который обрабатывает все исключения, возникающие в модели данных. Этот шаблон поля поддерживает класс Regex .

Позволяет пользователям редактировать десятичные числовые данные с помощью элемента управления TextBox . Кроме того, обеспечивает визуализацию элемента управления CompareValidator , который проверяет возможность преобразования вводимых данных в тип данных Decimal . Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то этот элемент управления также обеспечивает визуализацию элемента управления RequiredFieldValidator . Если поле содержит атрибут Range , то оно также обеспечивает визуализацию элемента управления RangeValidator . Шаблон поля Decimal_Edit.ascx предоставляет элемент управления System.Web.DynamicData.DynamicValidator , который обрабатывает все исключения, порождаемые в модели данных. Этот шаблон поля использует класс Regex .


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

Позволяет пользователям выбирать значения перечисления из списка с помощью элемента управления DropDownList .

Отображает поля, имеющие связь «многие к одному». Обеспечивает визуализацию элемента управления HyperLink , которое перенаправляет пользователя на страницу связи.

Позволяет пользователям изменять поля данных со связью «многие к одному» с помощью элемента управления DropDownList .

Позволяет пользователям редактировать целочисленные данные с помощью элемента управления TextBox . Шаблон также обеспечивает визуализацию элемента CompareValidator , который проверяет возможность преобразования данных, вводимых в текстовое поле, в целочисленный тип данных. Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то этот элемент управления также обеспечивает визуализацию элемента управления RequiredFieldValidator . Если поле в модели содержит атрибут Range , то поле также обеспечивает визуализацию элемента управления RangeValidator . Integer_Edit.ascx предоставляет элемент управления System.Web.DynamicData.DynamicValidator , который обрабатывает все исключения, возникающие в модели данных. Этот шаблон поля использует класс Regex .

Позволяет пользователям редактировать поля баз данных для определенных типов строк. Например, если модель данных сопоставлена с базой данных SQL Server, то шаблон Multiline_Edit.ascx выполняет сопоставление с типами данных text , ntext , varchar(max ), nvarchar(max ). Этот шаблон отображает элемент управления TextBox , свойство TextMode которого имеет значение MultiLine . Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то Multiline_Edit.ascx также обеспечивает визуализацию элемента управления RequiredFieldValidator . Если в модель данных добавлен атрибут RegularExpression , поле данных также обеспечивает визуализацию элемента управления RegularExpressionValidator . Multiline_Edit.ascx предоставляет элемент управления DynamicValidator System.Web.DynamicData.DynamicValidator , который обрабатывает все исключения, возникающие в модели данных.

Используется для отображения и редактирования полей данных со связью «многие ко многим», если модель данных приложения использует инфраструктуру ADO Entity Framework. Этот шаблон поля не используется, если модель данных основана на языке LINQ to SQL, так как он не поддерживает связь «многие ко многим».

Позволяет пользователям редактировать поля со связью «многие ко многим» с другой таблицей. Этот шаблон требует таблицы присоединения.

Отображает строковые данные и все числовые типы данных с помощью элемента управления Literal .

Позволяет пользователям редактировать строковые данные, которые не являются многострочным текстом, с помощью элемента управления TextBox , свойство TextMode которого равно SingleLine . Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то Text_Edit.ascx также обеспечивает визуализацию элемента управления RequiredFieldValidator . Если поле в базе данных имеет максимальную длину, то применяется свойство MaxLength элемента управления TextBox . Если в модели данных есть атрибут RegularExpression , шаблон поля по умолчанию также обеспечивает визуализацию элемента управления RegularExpressionValidator . Text_Edit.ascxпредоставляет элемент управления System.Web.DynamicData.DynamicValidator , который обрабатывает все исключения, порождаемые в модели данных.

Отображает URL-адреса с помощью элемента управления HyperLink . Тип поля данных отмечается как гиперссылка путем пометки поля в модели данных с помощью атрибута DataTypeAttribute , который указывает на то, что поле является URL-адресом.

Сопоставление типов данных с шаблонами полей

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

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

Путем отметки поля данных с помощью атрибута UIHintAttribute в модели данных. Дополнительные сведения см. в разделе Пошаговое руководство. Настройка внешнего вида и поведения полей данных в модели данных .

Если при одновременном использовании разметки и модели данных сопоставления не совпадают, то разметка имеет приоритет.

Отображение шаблонов полей

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

Платформа динамических данных начинает поиск с определения режима шаблонов полей.

Поиск шаблона поля в режиме отображения

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

Если поле данных в модели данных отмечено атрибутом UIHintAttribute , который указывает шаблон настраиваемого поля, то платформа динамических данных выполняет поиск элемента управления, который основан имени настраиваемого элемента управления и на атрибуте DataTypeAttribute , определенном в свойствах UIHint и DataTypeAttribute . Платформа динамических данных по умолчанию не отображает все типы данных. Например, не отображаются типы данных в виде массива битов (двоичный тип, отметка времени и графический тип). Дополнительные сведения об отображении пользовательских типов данных см. в описании класса DataTypeAttribute .

Если поле не отмечено атрибутом UIHintAttribute , то платформа динамических данных определяет тип данных из столбца в базе данных и выполняет поиск шаблона поля на основании типа данных. Имя типа определяется следующим образом.

Платформа динамических данных выполняет поиск шаблона поля, который совпадает с полным именем типа данных, например System.Int32 .

Если шаблон поля, совпадающий с полным именем типа, не найден, то платформа динамических данных выполняет поиск шаблона поля с простым именем типа данных, например Int32 .

Если шаблон поля, совпадающий с полным именем типа, не найден, то платформа динамических данных выполняет поиск особых значений, определенных в таблице данных, как показано далее. Например, если простой тип данных, такой как Int32 , не найден, платформа динамических данных осуществляет поиск типа Integer — особого случая, определенного в таблице данных. Если не найден простой тип данных String , то выполняется поиск типа Text — особого случая, определенного для типа String .

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

Резервный тип данных

Int16 , Byte , Long

Char , Integer , Decimal , GUID , DateTime , DateTimeOffset , TimeSpan

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

Если поле является внешним ключом, то платформа динамических данных использует шаблон ForeignKey.ascxдля связи «многие к одному». Для связи «один к многим» используется шаблон Children.ascx.

Поиск шаблона поля в режиме редактирования

Правила поиска в режиме редактирования идентичны правилам для режима отображения с одним исключением. Если шаблон поля находится в режиме редактирования, то платформа динамических данных использует все правила режима отображения, добавляя «_Edit» к имени необходимого шаблона поля (например, Text_Edit). Если шаблон поля со строкой «_Edit» в имени не найден, то платформа динамических данных осуществляет поиск шаблона поля без этой строки, то есть используется режим отображения (только чтение).

Поиск в режиме вставки

Правила поиска в режиме вставки идентичны правилам для режима отображения с одним исключением. Если шаблон поля находится в режиме вставки, то платформа динамических данных использует все правила режима отображения, добавляя «_Insert» к имени необходимого шаблона поля (например, Text_Insert). Если шаблон со строкой «_Insert» в имени не найден, то платформа динамических данных выполняет поиск шаблона поля в режиме редактирования.

Элементы управления «_Insert.ascx» не предоставляются по умолчанию. Таким образом, платформа динамических данных по умолчанию использует шаблоны поля режима редактирования в режиме вставки.

Элементы управления с привязкой к данным, использующие шаблоны полей

Элементы управления FormView , ListView , а также другие элементы управления с поддержкой шаблонов (например, GridView и DetailsView ) используют элемент управления DynamicControl для отображения и редактирования данных в модели данных.

Элемент управления DynamicControl также позволяет использовать шаблоны в столбцах данных.

Шаблоны сущностей представляют собой пользовательские элементы управления, которые позволяют настраивать макет для всей строки данных в таблице. Они предоставляют больше возможностей управления табличным макетом по сравнению с шаблонами страниц. При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\EntityTemplates. Эта папка содержит шаблоны сущностей по умолчанию, которые отображают данные в двух столбцах с помощью меток для имени поля и соответствующего элемента управления для значения поля.

Это шаблоны сущностей для операций отображения, редактирования и вставки. Шаблоны сущностей включены в шаблоны страниц Details.aspx, Insert.aspx и Update.aspx, а разработчик может использовать их в настраиваемых шаблонах страниц. Шаблоны сущностей используют шаблоны полей для отображения фактических данных. Шаблоны сущностей отображаются на странице при помощи элемента управления DynamicEntity . Во время выполнения платформа динамических данных заменяет этот элемент управления на соответствующий шаблон сущности.

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

При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\FilterTemplates. Эта папка содержит шаблоны фильтров по умолчанию.

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


Платформа динамических данных выполняет фильтрацию данных следующим образом:

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

Элемент управления источником данных выполняет измененный запрос и возвращает отфильтрованные данные для отображения в связанный элемент управления с привязкой к данным.

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

В следующей таблице описываются шаблоны фильтров по умолчанию в проектах на платформе динамических данных ASP.NET.

Шаблон фильтров по умолчанию

Отображает логические данные с помощью элемента управления DropDownList . Отображаются значения All , True и False . Если столбец может содержать значения null , то фильтр также предоставляет значение [Not set] .

Отображает значения перечисления с помощью элемента управления DropDownList . Отображаются значения All и строковые представления значений перечисления. Если столбец может содержать значения null , то фильтр также предоставляет значение [Not set] .

Отображает внешние ключи с помощью элемента управления DropDownList . Отображаются значения All и значения из связанной таблицы. Если столбец может содержать значения null , то фильтр также предоставляет значение [Not set] .

Разработка на ASP.NET. MasterPage, динамические компоненты, AJAX, ASP.NET MVC

Презентацию к данной лекции Вы можете скачать здесь.

7.1. Использование MasterPage

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

Одним из средств решения подобных задач являются мастер страницы (master pages). Они реализуют простую модель создания шаблонов форм с возможностью их повторного использования [1].

Для реализации данного механизма, в ASP.NET введены такие типы страниц, как мастер страницы (master pages) и страницы содержимого ( content pages). Мастер страница представляет собой шаблон страницы, при этом, она может содержать любые элементы, допустимые для обычной страницы, а также программный код. Страница содержимого содержит допустимые элементы управления , с помощью которых определяет содержимое, которым заполняются специальные области мастер страниц . Каждая страница содержимого ссылается на одну мастер страницу , от которой получает элементы и их расположение.

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

Для демонстрации возможностей мастер страниц рассмотрим пример создания простой мастер страницы и страницы содержимого.

Схематично структура мастер страницы показана на рис. 7.1 [2].

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

Мастер страниц создается так же, как и обычные страницы в ASP.NET [3]. Отличие заключается в том, что Веб-страницы начинаются с директивы Page , а мастер страница – с директивы Master :

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

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

Как видно, в результате данной операции была добавлена обычная HTML — таблица , для которой были установлены значения ширины и высоты некоторых ячеек. В режиме разработки дизайна страница будет выглядеть так, как показано на рис. 7.3.

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

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

Исходный код страницы Default.aspx в результате проделанных операций, а также ввода текста «это начальная страница Default.aspx» , будет выглядеть следующим образом.

Результат работы программы изображен на рис. 7.4.

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

Динамическая установка заголовка страницы в ASP.NET 2.0

Written on 19 Декабря 2008 . Posted in ASP.NET

В ASP.NET 2.0, страницы могут включать в себя область , чьи значения могут быть считаны и программно назначены. В данной статье мы рассмотрим, как динамически установить заголовок страницы. Мы также рассмотрим метод, который вы можете включить в класс своей мастер-страницы либо простой страницы для того, чтобы автоматически установить заголовок, основываясь на информации из карты сайта (аналогично элементу SiteMapPath). Читайте далее, чтобы узнать больше об этом!

Создание программно-доступной области

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

По умолчанию данную разметку (за исключением «. other -level elements . «) Visual Studio добавляет в новую ASP.NET страницу либо мастер-страницу. Стоит отметить runat=»server». Когда запрашивается ASP.NET-страница, механизм ASP.NET анализирует HTML-блок и создает иерархию элементов управления страницы. Во время данного процесса разметка, которая преобразует элементы управления серверной стороны, конвертируется в соответствующий экземпляр объекта. К примеру, во время данного процесса анализируется разметка элемента управления TextBox () и создается экземпляр класса TextBox для последующего участия во время событий жизненного цикла страницы.

Код runat=»server» указывает механизму ASP.NET на то, что определенная часть разметки является элементом управления серверной стороны относительно статического HTML. Разметка релаизована как экземпляр класса HtmlHead, который обладает свойствами, преобразованными в настройки уровня , включая:

  • Title — заголовок страницы
  • Style — набор записей каскадной таблицы стилей (CSS), указанных для страницы

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

Работаем с областью

Допустим, что у вас есть программно-доступная область на вашей странице либо мастер-странице, вы можете программно получить доступ к ней при помощи свойства Header класса Page. К примеру, чтобы программно настроить заголовок страницы, добавьте следующую строку кода в обработчик события Page_Load:

В качестве альтернативы вы можете использовать свойство Page.Title как ссылку на Page.Header.Title. Более того, если вы используете мастер-страницы, данный код может работать либо из мастер-страницы, либо ASP.NET-страницы, которая использует мастер-страницу. В таком случае область должна быть определена в мастер-странице, но ASP.NET- страница может иметь доступ посредством Page.Header.

Назначаем заголовок страницы, основываясь на информации карты сайта

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

При помощи нескольких строк мы можем создать в мастер-странице метод, который автоматически создаст и назначит соответствующий заголовок запрашиваемой страницы. При посещении пользователем стартовой страницы заголовок будет изменяться на «Amazon.com Homepage». Когда он посещает страницу Books, заголовок будет «Amazon.com Homepage :: Books», а когда посетит Novels — то увидит «Amazon.com Homepage :: Books :: Novels».

Чтобы реализовать это, нам нужно создать метод, который будет иметь доступ к посещаемому узлу карты сайта, и затем пройтись вверх по иерархии карты сайта пока мы не достигнем корня. Наконец, элементы Title каждого экземпляра SiteMapNode должны быть перечислены и соединены в один заголовок. Элемент SiteMapNode который преобразует текущую запрашиваемую страницу, может быть доступен посредством свойства CurrentNode класса SiteMap. Проход вверх по иерархии до корня может быть совершен при помощи свойства ParentNode, принадлежащего SiteMapNode.


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

Данный метод предполагает, что SiteMap.CurrentNode не будет пустым. Данное значение может быть равно Nothing, если запрашиваемая страница не определена в карте сайта. Предполагая то, что Assuming SiteMap.CurrentNode не имеет значения, метод продвигается вверх по иерархии, обрабатывая текущий элемент Title в строковую переменную output. Как только он встретит пустой currentNode — то есть мы только что обработали корень — мы возвращаем output.

Данный метод может быть использован из обработчика события Page_Load мастер-страницы при помощи следующего кода:

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

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

Представьте, что вы создаете веб-приложение, которое использовалось бы в маленьких юридических фирмах для управления их клиентурой. Вам понадобится таблица базы данных, которая хранила бы информацию о каждом клиенте. Данная таблица будет иметь колонки для каждого атрибута клиента, к примеру: FirstName -для имени, LastName- для фамилии, Email — для электронной почты, Address1 — для основного адреса, Address2 — для дополнительного адреса, City — город и так далее. Независимо от того, какие атрибуты вы определите для данной таблицы, вы можете быть уверены в том, что может появиться такая юридическая контора, которой потребуется дополнительная информация, не содержащаяся в таблице. Чтобы предоставить такой уровень гибкости, вам необходимо разрешить каждой фирме указывать дополнительные атрибуты относительно клиентов, касающихся их компании.

Данная статья является первой частью из четырех, которые рассматривают способ создания модели данных и пользовательского интерфейса, позволяющих реализовать данные динамические веб-сайты, управляемые данными. В этой статье мы рассмотрим сохранение динамической, определенной конечным пользователем информации в базе данных. Читайте далее, чтобы узнать больше об этом!

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

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

  • Модель данных, которая позволяет каждому клиенту указать свои собственные атрибуты наряду с возможностью записи значений данных атрибутов. Исходя из примера юридических компаний, клиентам необходимо иметь возможность указать специализированные атрибуты для своих потребителей. Соответственно, модель данных должна быть способна сохранить, какие именно специализированные атрибуты каждая юридическая компания хочет записать, а также значения данных атрибутов клиентуры каждой фирмы.
  • Веб-страница, которая позволяет клиентам указать свои специализированные атрибуты. Данная страница запросит у пользователя указать название и тип данных для каждого специализированного атрибута. Она также может предложить более продвинутые возможности, например такие, как необходимость в определенных атрибутах либо другие правила валидации.
  • Веб-страница, которая реализует данный динамический интерфейс, управляемый данными. Когда пользователь посещает данную веб-страницу, она загружает соответствующие веб-элементы управления для сбора специализированных атрибутов, которые применимы на данный момент к авторизированному пользователю. В дополнение данной странице требуется заполнить динамически загруженные элементы управления текущими значениями базы данных и предоставить пользователю возможность редактировать данные атрибуты, а также сохранять изменения в базе данных.

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

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

Создание фиксированной части модели данных: схемы Membership и связанных с ней сущностей, а также Customers и Clients

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

  • Схема для реализации SqlMembershipProvider и связанные сущности. Веб-сайт обладает поддержкой учетных записей и требует от пользователей авторизации. Когда пользователь авторизируется, нам необходимо определить с какими клиентами он связан, чтобы впоследствии отобразить пользовательский интерфейс с соответствующими динамическими атрибутами. Нам также необходима дополнительная таблица, которая хранит информацию о том, какой клиент принадлежит какой учетной записи.
  • Таблица Customers. Данная таблица хранит в себе строки для каждого пользователя — различные юридические компании, которые приобрели пользовательские учетные записи для использования нашего программного продукта.
  • Таблица Clients.Каждая юридическая компания будет обладать списком клиентов, представленных в виде записей в таблице. Данная таблица содержит фиксированные атрибуты для пользователей — такие как FirstName, LastName, Email, Address1, Address2, City и т.д., — которые являются общими среди всех юридических компаний. Динамические атрибуты клиентов, которые уникальны для каждого пользователя, будут храниться в другой таблице.

Во-первых, нам необходимо реализовать SqlMembershipProvider из ASP.NET и настроить сайт на использование авторизации на основе формы, но полное описание данного процесса выходит за рамки данной статьи (для получения более подробной информации вам стоит прочитать статьи по теме авторизации на основе формы, Membership и Roles). Реализация SqlMembershipProvider добавит несколько таблиц, представлений и хранимых процедур. Таблица aspnet_Users содержит по записи для каждого пользователя, и каждая записть уникально идентифицируется посредством поля UserId, которое является типа uniqueidentifier. В дополнение к таблицам, относящимся к SqlMembershipProvider, нам необходимо добавить другую таблицу, которая указывает, к которой учетной записи принадлежит каждый пользователь. Мы вернемся к этому, как только создадим таблицу Customers.

Таблица Customers используется для моделирования различных юридических компаний, которые используют наш веб-сайт. Данная таблица содержит по записи на каждую юридическую фирму (наши клиенты — пользователи). Создайте данную таблицу, следуя нижеприведенной схеме:

Динамически генерируемый Javascript, CSS в ASP.NET MVC

ASP.NET позволяет динамически генерировать HTML с помощью серверных тегов (бритва или ASPX). Но есть ли хороший способ генерировать содержимое * .js или * .css таким же образом, кроме использования встроенного (встроенного) CSS /Javascript. В настоящее время с такими технологиями, как Ajax, все больше логики перемещается с серверной стороны на клиентскую в Javascript. Было бы здорово иметь возможность динамически генерировать JS, используя всю гибкость, которую ASP.NET предоставляет для генерации HTML.

Например, мой Javascript содержит объявление модели представления Knockout с начальными данными, загруженными с сервера во время рендеринга Javascript, и некоторые дополнительные js-функции, поэтому в моем HTML вместо встроенных сценариев Я хочу, чтобы ссылки на сценарии были такими:

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

создание html/asp динамически

У меня есть структура типа treeview папок/ссылок, заполненных из таблицы. То, что я пытался сделать, было процедурным циклом через мой набор записей и генерировать мой html в page_init, а затем попытаться связать элементы управления. Когда я пытаюсь добавить кнопки ссылки в заполнители в html, кажется, что он никогда не может найти их.

Я мог бы упустить что-то фундаментальное здесь, все примеры, которые я видел, связывают элемент управления, который уже на странице, Я не могу создать html сам в page_init?

Если бы кто-то мог указать мне в правильном направлении, это было бы очень ценно

С уважением,
Пит

4 ответа

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

Я не знаю точно, какой тип контроля content_div , но не можете ли вы попробовать:

Это позволит вам найти элемент управления в элементе content_div управления.

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

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

Вы создаете только теги HTML и не создаете ASP.Net теги, так как они не могут быть проанализированы браузером.

Я думаю, что ваш код должен быть похож

ASP: элемент управления Placeholder — это просто держатель места, и он не равен тегу div HTML.
Для примера я дал тег div здесь.

asp.net элементы управления, добавленные как текст, не известны странице и, таким образом, viewstate / object не сохраняется для него, поэтому вы никогда не можете найти его с помощью Findcontrol.

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

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

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

Я бы рекомендовал объявить эквиваленты веб-элемента управления, такие как:

В Примере древовидной структуры HTML может выглядеть следующим образом:

Чтобы создать это в коде, вы бы сделали что-то похожее на:

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

Вы также заметите, что я использовал


    вместо

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