Часть 2. контроллеры

Джон Гэллоуэй

Музыкальное хранилище MVC — это учебное приложение, в котором представлены и объясняются пошаговые инструкции по использованию ASP.NET MVC и Visual Studio для разработки веб-приложений.

Музыкальное хранилище MVC — это упрощенная реализация в магазине, которая продает музыкальные альбомы в сети и реализует базовое администрирование сайта, вход пользователя в систему и функции корзины покупок.

В этой серии руководств подробно описаны все шаги, предпринятые для создания примера приложения музыкального хранилища ASP.NET MVC. Часть 2 охватывает контроллеры.

В традиционных веб-платформах входящие URL-адреса обычно сопоставлены с файлами на диске. Например: запрос URL-адреса, например "/Продуктс.аспкс" или "/Продуктс.ФП", может обрабатываться файлом Products. aspx или Products. php.

Веб-платформы MVC сопоставляют URL-адреса с кодом сервера немного иным образом. Вместо сопоставления входящих URL-адресов с файлами они вместо этого сопоставляют URL-адреса с методами в классах. Эти классы называются "контроллерами", они отвечают за обработку входящих HTTP-запросов, обработку входных данных пользователя, получение и сохранение данных, а также определение ответа на отправку клиенту (отображение HTML-кода, скачивание файла, перенаправление в другой URL-адрес и т. д.).

Добавление HomeController

Мы начнем приложение музыкального магазина MVC, добавив класс контроллера, который будет работать с URL-адресами на домашней странице нашего сайта. Мы будем следовать соглашениям об именовании ASP.NET MVC по умолчанию и назовем его HomeController.

Щелкните правой кнопкой мыши папку Controllers в обозреватель решений и выберите "Добавить", а затем — "контроллер...". кнопки

Откроется диалоговое окно "Добавление контроллера". Присвойте контроллеру имя "HomeController" и нажмите кнопку Добавить.

Будет создан новый файл HomeController.cs со следующим кодом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MvcMusicStore.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View();
        }
    }
}

Чтобы начать как можно скорее, мы заменяем метод Index простым методом, который просто возвращает строку. Мы сделаем два изменения:

  • Измените метод, чтобы он возвращал строку, а не ActionResult
  • Измените оператор return, чтобы он возвращал "Привет от домашнего"

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

public string Index()
{
    return "Hello from Home";
}

Запуск приложения

Теперь давайте запустим сайт. Мы можем запустить наш веб-сервер и испытать сайт, используя любой из следующих средств:

  • Выбор пункта меню "Отладка ⇨ начать отладку"
  • Нажмите кнопку с зеленой стрелкой на панели инструментов
  • Используйте сочетание клавиш F5.

При использовании любого из описанных выше действий будет выполнена компиляция нашего проекта, а затем ASP.NET Development Server, который был встроен в Visual Web Developer для запуска. В нижнем углу экрана появится уведомление, указывающее, что ASP.NET Development Server запущено, и отобразит номер порта, под которым он выполняется.

Visual Web Developer будет автоматически открывать окно браузера, URL-адрес которого указывает на наш веб-сервер. Это позволит нам быстро испытать наше веб-приложение:

Итак, это было довольно быстро — мы создали новый веб-сайт, добавили функцию с тремя строками и получили текст в браузере. Не Rocket наука, но это начало.

Примечание. Visual Web Developer включает в себя ASP.NET Development Server, который запустит ваш веб-сайт на случайном номере "порт". На снимке экрана выше сайт выполняется на http://localhost:26641/, поэтому используется порт 26641. Ваш номер порта будет другим. Когда мы говорим об URL-адресе, подобном/Сторе/бровсе, в этом учебнике, который будет идти после номера порта. Если номер порта 26641, то переход по адресу/Сторе/бровсе означает, что http://localhost:26641/Store/Browse.

Добавление Стореконтроллер

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

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

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

Теперь добавьте новый Стореконтроллер. Как и в случае с HomeController, это можно сделать, щелкнув правой кнопкой мыши папку Controllers в обозреватель решений и выбрав пункт меню Добавить контроллер>.

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

Эти методы (индекс, обзор и сведения) в контроллере называются "действиями контроллера", и, как уже говорилось с методом действия HomeController. index (), их заданием является реагирование на запросы URL-адресов и (вообще говоря) определение содержимого должен быть отправлен обратно браузеру или пользователю, вызвавшему URL-адрес.

Мы начнем нашу реализацию Стореконтроллер, изменив метод Сеиндекс (), чтобы возвращалась строка "Привет из Store. index ()", и мы добавим аналогичные методы для просмотра () и подробностей ():

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MvcMusicStore.Controllers
{
    public class StoreController : Controller
    {
        //
        // GET: /Store/
        public string Index()
        {
            return "Hello from Store.Index()";
        }
        //
        // GET: /Store/Browse
        public string Browse()
        {
            return "Hello from Store.Browse()";
        }
        //
        // GET: /Store/Details
        public string Details()
        {
            return "Hello from Store.Details()";
        }
    }
}

Запустите проект еще раз и просмотрите следующие URL-адреса:

  • /Store
  • /сторе/бровсе
  • /сторе/детаилс

Доступ к этим URL-адресам вызовет методы действий в нашем контроллере и возвращает ответы на строки:

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

Сначала мы изменим метод действия обзора, чтобы получить значение строки запроса из URL-адреса. Это можно сделать, добавив параметр "Жанр" в метод действия. Когда мы делаем это, ASP.NET MVC автоматически передает любые параметры QueryString или формы POST с именем жанра в метод действия при его вызове.

//
// GET: /Store/Browse?genre=Disco
public string Browse(string genre)
 {
    string message = HttpUtility.HtmlEncode("Store.Browse, Genre = "
+ genre);
 
    return message;
 }

Примечание. Мы используем метод служебной программы HttpUtility. HtmlEncode для очистки вводимых пользователем данных. Это не позволяет пользователям внедрять JavaScript в наше представление со ссылкой, такой как/Сторе/бровсе? Жанр =<скрипт>Window. location = 'http://hackersite.com'</Script>.

Теперь давайте перейду к/Сторе/бровсе? Жанр = Disco

Теперь измените действие Details, чтобы оно читало и отображало входной параметр с именем ID. В отличие от нашего предыдущего метода, мы не будем внедрять значение идентификатора в качестве параметра QueryString. Вместо этого мы будем внедрять его непосредственно в сам URL-адрес. Например:/Store/Details/5.

ASP.NET MVC позволяет нам без каких-либо усилий настраивать. По умолчанию соглашением о маршрутизации MVC ASP.NET является обработка сегмента URL-адреса после имени метода действия в виде параметра с именем "ID". Если метод действия имеет параметр с именем ID, ASP.NET MVC автоматически передаст сегмент URL-адреса в качестве параметра.

//
// GET: /Store/Details/5
public string Details(int id)
 {
    string message = "Store.Details, ID = " + id;
 
    return message;
 }

Запустите приложение и перейдите по/Store/Details/5:

Давайте посмотрим, что мы сделали на данный момент:

  • Мы создали новый проект ASP.NET MVC в Visual Web Developer.
  • Мы обсуждали базовую структуру папок приложения ASP.NET MVC.
  • Мы узнали, как запустить наш веб-сайт с помощью ASP.NET Development Server
  • Мы создали два класса контроллера: HomeController и Стореконтроллер.
  • Мы добавили методы действий в наши контроллеры, которые отвечают на запросы URL-адресов и возвращают текст в браузер.