Доступ к данным модели из контроллера (VB)
В этом руководстве описаны основы создания веб-приложения ASP.NET MVC с помощью Microsoft Visual Web Developer 2010 Express с пакетом обновления 1 (SP1), который является бесплатной версией Microsoft Visual Studio. Перед началом работы убедитесь, что вы установили перечисленные ниже предварительные требования. Вы можете установить их все, щелкнув следующую ссылку: Установщик веб-платформы. Кроме того, вы можете установить необходимые компоненты по отдельности, используя следующие ссылки:
- Предварительные требования для Visual Studio Web Developer Express с пакетом обновления 1 (SP1)
- ASP.NET обновление средств MVC 3
- SQL Server Compact 4.0 (среда выполнения и поддержка инструментов)
Если вы используете Visual Studio 2010 вместо Visual Web Developer 2010, установите необходимые компоненты, щелкнув следующую ссылку: Предварительные требования Для Visual Studio 2010.
В этом разделе доступен проект Visual Web Developer с VB.NET исходным кодом. Скачайте версию VB.NET. Если вы предпочитаете C#, переключитесь на версию этого руководства на C# .
В этом разделе вы создадите класс MoviesController
и напишете код, который извлекает данные фильма и отображает их в браузере с помощью шаблона представления. Прежде чем продолжить, обязательно выполните сборку приложения.
Щелкните правой кнопкой мыши папку Контроллеры и создайте новый MoviesController
контроллер. Выберите следующие параметры.
- Имя контроллера: MoviesController. (это установка по умолчанию).
- Шаблон: контроллер с действиями чтения и записи и представлениями с помощью Entity Framework.
- Класс модели: Movie (MvcMovie.Models).
- Класс контекста данных: MovieDBContext (MvcMovie.Models).
- Представления: Razor (CSHTML). (Значение по умолчанию.)
Нажмите кнопку Добавить. Visual Web Developer создает следующие файлы и папки:
- Файл MoviesController.vb в папке Controllers проекта.
- Папка Movies в папке Views проекта.
- Create.vbhtml, Delete.vbhtml, Details.vbhtml, Edit.vbhtml и Index.vbhtml в новой папке Views\Movies .
Механизм формирования шаблонов ASP.NET MVC 3 автоматически создал методы и представления действий CRUD (создание, чтение, обновление и удаление). Теперь у вас есть полнофункциональное веб-приложение, которое позволяет создавать, перечислять, изменять и удалять записи фильмов.
Запустите приложение и перейдите к контроллеру Movies
, добавив параметр /Movies к URL-адресу в адресной строке браузера. Так как приложение использует маршрутизацию по умолчанию (определенную в файле Global.asax ), запрос http://localhost:xxxxx/Movies
браузера направляется в метод действия по умолчанию Index
контроллера Movies
. Другими словами, запрос http://localhost:xxxxx/Movies
браузера фактически совпадает с запросом http://localhost:xxxxx/Movies/Index
браузера . В результате будет пустой список фильмов, так как вы еще не добавили их.
Создание фильма
Щелкните ссылку Create New (Создать). Введите некоторые сведения о фильме и нажмите кнопку Создать .
Нажатие кнопки Создать приводит к тому, что форма будет опубликована на сервере, где сведения о фильме сохраняются в базе данных. Затем вы будете перенаправлены по URL-адресу /Movies , где вы увидите созданный фильм в описании.
Создайте еще несколько записей фильмов. Попробуйте воспользоваться ссылками Изменить, Сведения и Удалить — все они работают.
Изучение созданного кода
Откройте файл Controllers\MoviesController.vb и проверьте созданный Index
метод. Ниже показана часть контроллера movie с методом Index
.
Public Class MoviesController
Inherits System.Web.Mvc.Controller
Private db As MovieDBContext = New MovieDBContext
'
' GET: /Movies/
Function Index() As ViewResult
Return View(db.Movies.ToList())
End Function
Следующая строка из MoviesController
класса создает экземпляр контекста базы данных фильмов, как описано выше. Контекст базы данных фильмов можно использовать для запроса, редактирования и удаления фильмов.
Private db As MovieDBContext = New MovieDBContex
Запрос к контроллеру Movies
возвращает все записи в Movies
таблице базы данных фильмов, а затем передает результаты в Index
представление.
Строго типизированные модели и ключевое @model слово
Ранее в этом руководстве вы узнали, как контроллер может передавать данные или объекты в шаблон представления с помощью ViewBag
объекта . ViewBag
— это динамический объект, предоставляющий удобный способ передачи сведений в представление с поздним привязкой.
ASP.NET MVC также предоставляет возможность передавать строго типизированные данные или объекты в шаблон представления. Этот строго типизированный подход обеспечивает лучшую проверку кода во время компиляции и расширенные возможности IntelliSense в редакторе Visual Web Developer. Мы используем этот подход с классом MoviesController
и шаблоном представления Index.vbhtml .
Обратите внимание, что код создает List
объект при вызове вспомогательного View
метода в методе Index
действия. Затем код передает этот Movies
список из контроллера в представление:
Function Index() As ViewResult
Return View(db.Movies.ToList())
End Function
Включив @ModelType
оператор в начало файла шаблона представления, можно указать тип объекта, который ожидается в представлении. При создании контроллера фильма Visual Web Developer автоматически включил следующую @model
инструкцию в начало файла Index.vbhtml :
@ModelType IEnumerable(Of MvcMovie.Movie)
Эта @ModelType
директива позволяет получить доступ к списку фильмов, которые контроллер передал в представление, используя строго типизированный Model
объект. Например, в шаблоне Index.vbhtml код циклически просматривает фильмы, выполняя инструкцию foreach
над строго типизированным Model
объектом:
@For Each item In Model
Dim currentItem = item
@<tr>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Title)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.ReleaseDate)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Genre)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", New With {.id = currentItem.ID}) |
@Html.ActionLink("Details", "Details", New With {.id = currentItem.ID}) |
@Html.ActionLink("Delete", "Delete", New With {.id = currentItem.ID})
</td>
</tr>
Next
Model
Так как объект строго типизирован (как IEnumerable<Movie>
объект), каждый item
объект в цикле типизирован как Movie
. Среди других преимуществ это означает, что вы получаете проверку кода во время компиляции и полную поддержку IntelliSense в редакторе кода:
Работа с SQL Server Compact
Entity Framework Code First обнаружила, что предоставленная строка подключения к базе данных указывала на Movies
базу данных, которая еще не существует, поэтому Code First создал базу данных автоматически. Чтобы убедиться, что он создан, зайдите в папку App_Data . Если файл Movies.sdf не отображается, нажмите кнопку Показать все файлы на панели инструментов Обозреватель решений, нажмите кнопку Обновить, а затем разверните папку App_Data.
Дважды щелкните файл Movies.sdf, чтобы открыть Обозреватель сервера. Затем разверните папку Таблицы , чтобы просмотреть таблицы, созданные в базе данных.
Примечание
Если при двойном щелчке movies.sdf появляется сообщение об ошибке, убедитесь, что установлены средства Visual Studio 2010 с пакетом обновления 1 (SP1) для SQL Server Compact 4.0. (Ссылки на программное обеспечение см. в списке необходимых компонентов в части 1 этой серии учебников.) Если вы установите выпуск сейчас, вам придется закрыть и повторно открыть Visual Web Developer.
Существует две таблицы: одна для набора сущностей Movie
, а затем EdmMetadata
таблица. Таблица EdmMetadata
используется Entity Framework для определения того, когда модель и база данных не синхронизированы.
Щелкните таблицу правой Movies
кнопкой мыши и выберите Показать данные таблицы , чтобы просмотреть созданные данные.
Щелкните таблицу правой Movies
кнопкой мыши и выберите Изменить схему таблицы.
Обратите внимание, что схема Movies
таблицы сопоставляется с классом, созданным Movie
ранее. Entity Framework Code First автоматически создал эту схему на основе вашего Movie
класса.
По завершении закройте подключение. (Если вы не закроете подключение, при следующем запуске проекта может появиться сообщение об ошибке.
Теперь у вас есть база данных и простая страница со списком для отображения содержимого из нее. В следующем руководстве мы рассмотрим остальную часть сформированного кода и добавим SearchIndex
метод и SearchIndex
представление, которые позволяют искать фильмы в этой базе данных.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по