Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Примечание
Обновленная версия этого руководства доступна здесь , используя последнюю версию Visual Studio. В новом руководстве используется ASP.NET Core MVC, который предоставляет множество улучшений по сравнению с этим руководством.
В этом руководстве описывается модель MVC ASP.NET Core с контроллерами и представлениями. Razor Pages — это новая альтернатива в ASP.NET Core, модель программирования на основе страниц, которая упрощает и повышает эффективность создания пользовательского веб-интерфейса. Мы рекомендуем ознакомиться с руководством по Razor Pages до версии MVC. Руководство по Razor Pages:
- проще для выполнения;
- охватывает дополнительные возможности;
- Предпочтительный подход к разработке новых приложений.
В этом разделе вы создадите класс MoviesController и напишете код, который извлекает данные фильма и отображает их в браузере с помощью шаблона представления.
Выполните сборку приложения , прежде чем переходить к следующему шагу. Если вы не выполните сборку приложения, вы получите сообщение об ошибке при добавлении контроллера.
В Обозреватель решений щелкните правой кнопкой мыши папку Контроллеры и выберите пункт Добавить, а затем Контроллер.
В диалоговом окне Добавление шаблона выберите Контроллер MVC 5 с представлениями с помощью Entity Framework и нажмите кнопку Добавить.
Выберите Movie (MvcMovie.Models) для класса Model.
Выберите MovieDBContext (MvcMovie.Models) для класса контекста Data.
В поле Имя контроллера введите MoviesController.
На рисунке ниже показано завершенное диалоговое окно.
Нажмите кнопку Добавить. (Если вы получили сообщение об ошибке, вероятно, вы не сделали сборку приложения перед добавлением контроллера.) Visual Studio создает следующие файлы и папки:
- Файл MoviesController.cs в папке Controllers .
- Папка Views\Movies .
- Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml и Index.cshtml в новой папке Views\Movies .
Visual Studio автоматически создает методы и представления действий CRUD (создание, чтение, обновление и удаление) (автоматическое создание методов действий и представлений CRUD называется формированием шаблонов). Теперь у вас есть полнофункциональное веб-приложение, которое позволяет создавать, перечислять, изменять и удалять записи фильмов.
Запустите приложение и щелкните ссылку MVC Movie (или перейдите к контроллеру Movies , добавив /Movies к URL-адресу в адресной строке браузера). Так как приложение использует маршрутизацию по умолчанию (определенную в файле App_Start\RouteConfig.cs ), запрос http://localhost:xxxxx/Movies браузера направляется в метод действия по умолчанию Index контроллера Movies . Другими словами, запрос http://localhost:xxxxx/Movies браузера фактически совпадает с запросом http://localhost:xxxxx/Movies/Indexбраузера . В результате будет пустой список фильмов, так как вы еще не добавили их.
Создание фильма
Щелкните ссылку Create New (Создать). Введите некоторые сведения о фильме и нажмите кнопку Создать .
Примечание
Возможно, вы не сможете ввести десятичные знаки или запятые в поле Цена. Для поддержки проверки jQuery для языковых стандартов, отличных от английского языка, в которых используется запятая (",") для десятичной запятой и форматов даты, отличных от US-English, необходимо включить globalize.js , а также файл языка и региональных параметров/globalize.cultures.js (из https://github.com/jquery/globalize ) и JavaScript для использования Globalize.parseFloat. Я покажу, как это сделать, в следующем руководстве. А пока вводите целые числа, такие как 10.
Нажатие кнопки Создать приводит к тому, что форма будет опубликована на сервере, где сведения о фильме сохраняются в базе данных. Затем вы будете перенаправлены по URL-адресу /Movies , где вы увидите созданный фильм в описании.
Создайте еще несколько записей фильмов. Попробуйте воспользоваться ссылками Изменить, Сведения и Удалить — все они работают.
Изучение созданного кода
Откройте файл Controllers\MoviesController.cs и проверьте созданный Index метод. Ниже показана часть контроллера movie с методом Index .
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
Запрос к контроллеру Movies возвращает все записи в Movies таблице, а затем передает результаты в Index представление. Следующая строка из MoviesController класса создает экземпляр контекста базы данных фильмов, как описано выше. Контекст базы данных фильмов можно использовать для запроса, редактирования и удаления фильмов.
private MovieDBContext db = new MovieDBContext();
Строго типизированные модели и ключевое @model слово
Ранее в этом руководстве вы узнали, как контроллер может передавать данные или объекты в шаблон представления с помощью ViewBag объекта .
ViewBag— это динамический объект, предоставляющий удобный способ передачи сведений в представление с поздним привязкой.
MVC также предоставляет возможность передавать строго типизированные объекты в шаблон представления. Этот строго типизированный подход обеспечивает более эффективную проверку кода во время компиляции и расширенные возможности IntelliSense в редакторе Visual Studio. Механизм формирования шаблонов в Visual Studio использовал этот подход (то есть передачу строго типизированной модели) с MoviesController шаблонами классов и представлений при создании методов и представлений.
В файле Controllers\MoviesController.cs проверьте созданный Details метод. Метод Details показан ниже.
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
Параметр id обычно передается как данные маршрута, например http://localhost:1234/movies/details/1 задает контроллер для контроллера фильма, для действия — значение details , а для — id значение 1. Вы также можете передать идентификатор с помощью строки запроса следующим образом:
http://localhost:1234/movies/details?id=1
Movie Если объект найден, экземпляр Movie модели передается в Details представление:
return View(movie);
Изучите содержимое файла Views\Movies\Details.cshtml :
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Movie</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Title)
</dt>
@*Markup omitted for clarity.*@
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
Включив @model оператор в начало файла шаблона представления, можно указать тип объекта, который ожидается в представлении. При создании контроллера movie Visual Studio автоматически включает следующий оператор @model в начало файла Details.cshtml:
@model MvcMovie.Models.Movie
Эта директива @model обеспечивает доступ к фильму, который контроллер передал в представление с использованием строго типизированного объекта Model. Например, в шаблоне Details.cshtml код передает каждое поле DisplayNameFor фильма в вспомогательные функции и DisplayFor HTML со строго типизированным Model объектом. Методы Create и Edit и шаблоны представлений также передают объект модели фильма.
Изучите шаблон представления Index.cshtml и Index метод в файле MoviesController.cs . Обратите внимание, что код создает List объект при вызове вспомогательного View метода в методе Index действия. Затем код передает этот Movies список из Index метода action в представление:
public ActionResult Index()
{
return View(db.Movies.ToList());
}
При создании контроллера фильма Visual Studio автоматически включала следующую @model инструкцию в начало файла Index.cshtml :
@model IEnumerable<MvcMovie.Models.Movie>
Эта @model директива позволяет получить доступ к списку фильмов, которые контроллер передал в представление, используя строго типизированный Model объект. Например, в шаблоне Index.cshtml код циклически проходит по фильмам, выполняя инструкцию foreach над строго типизированным Model объектом:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<th>
@Html.DisplayFor(modelItem => item.Rating)
</th>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
Model Так как объект строго типизирован (как IEnumerable<Movie> объект), каждый item объект в цикле типизирован как Movie. Среди других преимуществ это означает, что вы получаете проверку кода во время компиляции и полную поддержку IntelliSense в редакторе кода:
Работа с SQL Server LocalDB
Entity Framework Code First обнаружила, что предоставленная строка подключения к базе данных указывала на Movies базу данных, которая еще не существует, поэтому Code First создал базу данных автоматически. Чтобы убедиться, что он создан, зайдите в папку App_Data . Если файл Movies.mdf не отображается, нажмите кнопку Показать все файлы на панели инструментов Обозреватель решений, нажмите кнопку Обновить, а затем разверните папку App_Data.
Дважды щелкните Movies.mdf , чтобы открыть ОБОЗРЕВАТЕЛЬ СЕРВЕРА, а затем разверните папку Таблицы , чтобы просмотреть таблицу Movies. Обратите внимание на значок ключа рядом с идентификатором. По умолчанию EF делает свойство с именем ID первичным ключом. Дополнительные сведения о EF и MVC см. в отличном руководстве Тома Дайкстра по MVC и EF.
Щелкните таблицу правой Movies кнопкой мыши и выберите Показать данные таблицы , чтобы просмотреть созданные данные.
Щелкните таблицу правой Movies кнопкой мыши и выберите Открыть определение таблицы , чтобы просмотреть структуру таблицы, созданную Entity Framework Code First.
Обратите внимание, что схема Movies таблицы сопоставляется с классом, созданным Movie ранее. Entity Framework Code First автоматически создал эту схему на основе вашего Movie класса.
По завершении закройте подключение, щелкнув правой кнопкой мыши MovieDBContext и выбрав Закрыть подключение. (Если вы не закроете подключение, при следующем запуске проекта может появиться сообщение об ошибке.
Теперь у вас есть база данных и страницы для отображения, редактирования, обновления и удаления данных. В следующем руководстве мы рассмотрим остальную часть кода с шаблонами и добавим SearchIndex метод и SearchIndex представление, которые позволяют искать фильмы в этой базе данных. Дополнительные сведения об использовании Entity Framework с MVC см. в статье Создание модели данных Entity Framework для ASP.NET приложения MVC.