ASP.NET MVC 4
Адам Фриман
Создание проекта для примера
Для этой главы мы создадим новый проект MVC под названием ControllerExtensibility
на шаблоне Empty
. Для работы нам потребуются несколько простых контроллеров, чтобы продемонстрировать различные возможности расширения. Для начала определим класс Result.cs
в папке Models
, содержимое которого показано в листинге 17-1.
Листинг 17-1: Объект модели Result
namespace ControllerExtensibility.Models
{
public class Result {
public string ControllerName { get; set; }
public string ActionName { get; set; }
}
}
Далее мы создадим папку /Views/Shared
и добавим новое представление под названием Result.cshtml
. Это представление, которое будут визуализировать все методы действий в наших классах контроллерах, его содержимое показано в листинге 17-2.
Листинг 17-2: Содержимое файла Result.cshtml
@model ControllerExtensibility.Models.Result
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Result</title>
</head>
<body>
<div>Controller: @Model.ControllerName</div>
<div>Action: @Model.ActionName</div>
</body>
</html>
Это представление использует класс Result
, который мы определили в листинге 17-1, в качестве модели и просто отображает значения свойств ControllerName
и ActionName
. Наконец, нам нужно создать несколько базовых контроллеров.
В листинге 17-3 показан контроллер Product
.
Листинг 17-3: Контроллер Product
using ControllerExtensibility.Models;
using System.Web.Mvc;
namespace ControllerExtensibility.Controllers
{
public class ProductController : Controller
{
public ViewResult Index()
{
return View("Result", new Result
{
ControllerName = "Product",
ActionName = "Index"
});
}
public ViewResult List()
{
return View("Result", new Result
{
ControllerName = "Product",
ActionName = "List"
});
}
}
}
В листинге 17-4 показан контроллер Customer
.
Листинг 17-4: Контроллер Customer
using ControllerExtensibility.Models;
using System.Web.Mvc;
namespace ControllerExtensibility.Controllers
{
public class CustomerController : Controller
{
public ViewResult Index()
{
return View("Result", new Result
{
ControllerName = "Customer",
ActionName = "Index"
});
}
public ViewResult List()
{
return View("Result", new Result
{
ControllerName = "Customer",
ActionName = "List"
});
}
}
}
Наши контроллеры сообщают представлению Result.cshtml
, что было вызвано, – больше ничего полезного они не делают. В этой главе нам больше ничего и не нужно, так как здесь мы учимся изменять способы обработки контроллеров и действий.