}
else
{
return RedirectToAction("Index", "Home");
}
}
public ActionResult Delete(Guid? userId)
{
if (!userId.HasValue)
throw new HttpException(404, "Пользователь не найден");
if (User.IsInRole("Administrators"))
{
MembershipProvider mp = Membership.Provider;
MembershipUser user = mp.GetUser(userId, false);
mp.DeleteUser(user.UserName, true);
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Index", "Home");
}
}
В листинге 4.1 определено три действия для отображения данных конкретного пользователя, удаления данных и сохранения новых данных. Обратите внимание, что действия Update
и Delete
не возвращают сопоставленного представления, а только перенаправляют запрос на вызов других действий с имеющимися представлениями. Только действие Select
возвращает сопоставленное представление. Давайте создадим соответствующее представление для контроллера Admin
, назвав его Select
, и определим его следующим образом:
runat="server">
Пользователь
Данные
Email
подтвержден
заблокирован
Когда вы запустите проект, то после входа под логином Admin и перехода на страницу администрирования, вы сможете выбирать пользователей путем перехода по ссылкам Выбрать. После такого перехода для пользователя User вы должны увидеть следующую форму (рис. 4.7).

Рис. 4.7. Форма редактирования данных пользователя
C помощью этой формы и действий, реализованных в нашем контроллере, вы сможете модифицировать данные пользователя либо удалить его из системы.
Мы рассмотрели простейший вариант создания контроллеров и их действий, а также сопоставленных с ними представлений. Но архитектура MVC Framework помимо рассмотренных механизмов содержит массу больших и малых механизмов, которые позволяют регулировать контроллеры, управлять вызовами кода, защищать контроллеры и действия от нежелательных вызовов, формировать базовые архитектуры для набора действий или даже группы контроллеров.
Далее мы более подробно рассмотрим архитектуру реализации контроллеров в MVC Framework. По мере рассмотрения, наш простейший код будет видоизменяться согласно новым техникам, о которых будет идти рассказ.
Порядок вызова архитектурных механизмов
ASP.NET MVC реализует следующий порядок выполнения внутренних механизмов:
1. При первом обращении к приложению в Global.asax производится регистрация маршрутов механизма маршрутизации ASP.NET в специальном объекте RouteTable
.
2. С помощью urlRoutingModule
производится маршрутизация запроса с использованием созданных маршрутов, при этом выбирается первый подходящий маршрут, после чего создается объект типа RequestContext
.
3. Обработчик MvcHandler
, с помощью данных полученного объекта RequestContext
, инстанцирует объект фабрики контроллеров типа IControllerFactory
. Если он не был задан специально, по умолчанию инстанцируется объект класса DafaultControllerFactory
.
4. В фабрике контроллеров вызывается метод GetControllerInstance
, который принимает параметр в виде типа необходимого контроллера. Этот метод возвращает инстанцированный объект необходимого контроллера.
5. У полученного объекта контроллера вызывается метод Execute, которому передается объект RequestContext
.
6. С помощью ActionInvoker
, свойства класса Controller
типа ControllerActionInvoker
, определяется необходимое действие и выполняется его код. Если ActionInvoker
специально не сопоставлен, то используется свойство ActionInvoker
по умолчанию. Для инициализации параметров действия используется механизм Model Binding, который может быть переопределен.
7. Определение действия может быть изменено в случае, когда пользователь определил для действий атрибуты типа ActionMethodSelectorAttribute
. Для каждого такого атрибута вызывается метод IsValidForRequest
, которому передается набор параметров типа ControllerContext
и MethodInfo
. Метод IsValidForRequest
возвращает результат в виде bool
, который определяет, подходит ли выбранное действие для исполнения в контексте запроса.
8. Выполнение действия может быть отменено, изменено или пропущено, если пользователь определил для действия атрибуты типа FilterAttibute
. Такие атрибуты могут использоваться для определения прав доступа, кэширования результатов, обработки исключений.
Читать дальше
Конец ознакомительного отрывка
Купить книгу