Добавление контроллера (C#)Adding a Controller (C#)

по Рик Андерсон (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.

В этом учебнике вы узнаете об основах создания веб-приложения ASP.NET MVC с помощью Microsoft Visual Web Developer 2010 Express с пакетом обновления 1 (SP1), который является бесплатной версией Microsoft Visual Studio.This tutorial will teach you the basics of building an ASP.NET MVC Web application using Microsoft Visual Web Developer 2010 Express Service Pack 1, which is a free version of Microsoft Visual Studio. Прежде чем начать, убедитесь, что установлены предварительные требования, перечисленные ниже.Before you start, make sure you've installed the prerequisites listed below. Чтобы установить все эти компоненты, щелкните следующую ссылку: установщик веб-платформы.You can install all of them by clicking the following link: Web Platform Installer. Кроме того, вы можете отдельно установить необходимые компоненты, используя следующие ссылки:Alternatively, you can individually install the prerequisites using the following links:

Если вы используете Visual Studio 2010 вместо Visual Web Developer 2010, установите необходимые компоненты, щелкнув следующую ссылку: Предварительные требования для Visual studio 2010.If you're using Visual Studio 2010 instead of Visual Web Developer 2010, install the prerequisites by clicking the following link: Visual Studio 2010 prerequisites.

Для этого раздела доступен проект Visual C# Web Developer с исходным кодом.A Visual Web Developer project with C# source code is available to accompany this topic. Скачайте C# версию.Download the C# version. Если вы предпочитаете Visual Basic, переключитесь на Visual Basic версию этого учебника.If you prefer Visual Basic, switch to the Visual Basic version of this tutorial.

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

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

Мы покажем все эти концепции в этой серии руководств и покажем, как их использовать для создания приложения.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". Оставьте шаблон по умолчанию пустым контроллером и нажмите кнопку Добавить.Leave the default template as Empty controller and click Add.

АддхелловорлдконтроллерAddHelloWorldController

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

В блоке public class HelloWorldController создайте два метода, которые выглядят как следующий код.Inside the public class HelloWorldController block, create two methods that look like the following code. В качестве примера контроллер вернет строку HTML.The controller will return a string of HTML as an example.

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..."; 
        } 
    } 
}

Контроллеру присваивается имя HelloWorldController, а первым приведенному выше методу присваивается имя Index.Your 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:43246/HelloWorld.) Страница в браузере будет выглядеть, как на следующем снимке экрана.(For example, in the illustration below, it's http://localhost:43246/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. Логика сопоставления по умолчанию, используемая ASP.NET MVC, использует следующий формат для определения вызываемого кода:The default mapping 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, который возвращает строку "This is the Welcome action method..." (Это метод действия 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. Система автоматически сопоставляет именованные параметры из строки запроса в адресной строке с параметрами в методе.The 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.