Добавление контроллераAdding a Controller

по Рик Андерсон (by Rick Anderson

Note

Обновленная версия этого учебника доступна здесь , в которой используется ASP.NET MVC 5 и Visual Studio 2013.An updated version of this tutorial is available here that uses ASP.NET MVC 5 and Visual Studio 2013. Он более безопасен, гораздо проще следовать и демонстрирует дополнительные функции.It's more secure, much simpler to follow and demonstrates more features.

MVC означает модель-представление-контроллер.MVC stands for model-view-controller. MVC — это шаблон для разработки приложений, которые хорошо спроектированы, тестируемы и просты в обслуживании.MVC is a pattern for developing applications that are well architected, testable and easy to maintain. Приложения на основе MVC содержат:MVC-based applications contain:

  • M Оделс: классы, представляющие данные приложения и использующие логику проверки для применения бизнес-правил для этих данных.M odels: Classes that represent the data of the application and that use validation logic to enforce business rules for that data.
  • V редставления: файлы шаблонов, используемые приложением для динамического создания ответов HTML.V iews: Template files that your application uses to dynamically generate HTML responses.
  • C — это классы, которые обрабатывали входящие запросы браузера, извлекают данные модели, а затем указывают шаблоны представлений, которые возвращают ответ в браузер.C ontrollers: Classes that handle incoming browser requests, retrieve model data, and then specify view templates that return a response to the browser.

Мы покажем все эти концепции в этой серии руководств и покажем, как их использовать для создания приложения.We'll be covering all these concepts in this tutorial series and show you how to use them to build an application.

Начнем с создания класса Controller.Let's begin by creating a controller class. В Обозреватель решенийщелкните правой кнопкой мыши папку Controllers и выберите пункт Добавить контроллер.In Solution Explorer, right-click the Controllers folder and then select Add Controller.

Присвойте новому контроллеру имя "HelloWorldController".Name your new controller "HelloWorldController". Оставьте шаблон по умолчанию пустым контроллером MVC и нажмите кнопку Добавить.Leave the default template as Empty MVC controller and click Add.

добавить контроллер

Обратите внимание, что в Обозреватель решений создан новый файл с именем HelloWorldController.CS.Notice in Solution Explorer that a new file has been created named HelloWorldController.cs. Файл открыт в интегрированной среде разработки.The file is open in the IDE.

Замените содержимое файла на код, приведенный ниже.Replace the contents of the file with the following code.

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

В качестве примера методы контроллера будут возвращать строку HTML.The controller methods will return a string of HTML as an example. Контроллеру присваивается имя HelloWorldController, а первым приведенному выше методу присваивается имя Index.The controller is named HelloWorldController and the first method above is named Index. Давайте выберем его из браузера.Let's invoke it from a browser. Запустите приложение (нажмите клавишу F5 или CTRL + F5).Run the application (press F5 or Ctrl+F5). В браузере добавьте "HelloWorld" в путь в адресной строке.In the browser, append "HelloWorld" to the path in the address bar. (Например, на рисунке ниже http://localhost:1234/HelloWorld.) Страница в браузере будет выглядеть, как на следующем снимке экрана.(For example, in the illustration below, it's http://localhost:1234/HelloWorld.) The page in the browser will look like the following screenshot. В приведенном выше методе код возвратил строку напрямую.In the method above, the code returned a string directly. Вы сообщили системе, что просто возвращали какой-либо код HTML.You told the system to just return some HTML, and it did!

ASP.NET MVC вызывает различные классы контроллеров (и различные методы действий в них) в зависимости от входящего URL-адреса.ASP.NET MVC invokes different controller classes (and different action methods within them) depending on the incoming URL. Логика маршрутизации URL-адресов по умолчанию, используемая ASP.NET MVC, использует следующий формат для определения того, какой код вызывать:The default URL routing logic used by ASP.NET MVC uses a format like this to determine what code to invoke:

/[Controller]/[ActionName]/[Parameters]

Первая часть URL-адреса определяет класс контроллера для выполнения.The first part of the URL determines the controller class to execute. Поэтому /хелловорлд сопоставляется с классом HelloWorldController.So /HelloWorld maps to the HelloWorldController class. Вторая часть URL-адреса определяет метод действия для выполняемого класса.The second part of the URL determines the action method on the class to execute. Поэтому /хелловорлд/индекс приведет к выполнению метода Index класса HelloWorldController.So /HelloWorld/Index would cause the Index method of the HelloWorldController class to execute. Обратите внимание, что нам пришлось бы перейти к /хелловорлд , а метод Index использовался по умолчанию.Notice that we only had to browse to /HelloWorld and the Index method was used by default. Это вызвано тем, что метод, именуемый Index, является методом по умолчанию, который будет вызываться на контроллере, если он не указан явно.This is because a method named Index is the default method that will be called on a controller if one is not explicitly specified.

Перейдите по адресу http://localhost:xxxx/HelloWorld/Welcome.Browse to http://localhost:xxxx/HelloWorld/Welcome. Метод Welcome выполняет и возвращает строку, "это метод действия приветствия...".The Welcome method runs and returns the string "This is the Welcome action method...". Сопоставление MVC по умолчанию — /[Controller]/[ActionName]/[Parameters].The default MVC mapping is /[Controller]/[ActionName]/[Parameters]. Для этого URL-адреса заданы контроллер HelloWorld и метод действия Welcome.For this URL, the controller is HelloWorld and Welcome is the action method. Часть URL-адреса [Parameters] на данный момент еще не использовалась.You haven't used the [Parameters] part of the URL yet.

Давайте немного изменим пример, чтобы вы могли передать некоторые сведения о параметрах с URL-адреса на контроллер (например, /хелловорлд/велкоме? Name = скотт&нумтимес = 4).Let's modify the example slightly so that you can pass some parameter information from the URL to the controller (for example, /HelloWorld/Welcome?name=Scott&numtimes=4). Измените метод Welcome, включив в него два параметра, как показано ниже.Change your Welcome method to include two parameters as shown below. Обратите внимание, что в C# коде используется функция необязательного параметра, указывающая, что параметр numTimes по умолчанию должен иметь значение 1, если для этого параметра не было передано никакого значения.Note that the code uses the C# optional-parameter feature to indicate that the numTimes parameter should default to 1 if no value is passed for that parameter.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

Запустите приложение и перейдите по URL-адресу примера (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4).Run your application and browse to the example URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). Вы можете попробовать различные значения name и numtimes в URL-адресе.You can try different values for name and numtimes in the URL. Система привязки модели MVC ASP.NET автоматически сопоставляет именованные параметры из строки запроса в адресной строке с параметрами в методе.The ASP.NET MVC model binding system automatically maps the named parameters from the query string in the address bar to parameters in your method.

В этих примерах контроллер выполняет "VC" части MVC, т. е. представление и контроллер работают.In both these examples the controller has been doing the "VC" portion of MVC — that is, the view and controller work. Контроллер возвращает HTML напрямую.The controller is returning HTML directly. Обычно вы не хотите, чтобы контроллеры возвращали HTML напрямую, так как это очень громоздкий для кода.Ordinarily you don't want controllers returning HTML directly, since that becomes very cumbersome to code. Вместо этого мы обычно используем отдельный файл шаблона представления для создания ответа HTML.Instead we'll typically use a separate view template file to help generate the HTML response. Давайте посмотрим, как это можно сделать.Let's look next at how we can do this.