Гайдар Магдануров - ASP.NET MVC Framework
- Название:ASP.NET MVC Framework
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2010
- Город:Санкт-Петербург
- ISBN:978-5-9775-0462-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Гайдар Магдануров - ASP.NET MVC Framework краткое содержание
Описаны модель и доступ к данным (технологии LINQ, Entity Framework и др.), контроллеры, представление и интерфейс приложения, механизмы маршрутизации и Ajax-функциональность. Уделено внимание вопросам тестирования веб-приложений. Рассмотрены особенности применения ASP.NET MVC 2 в Visual Studio 2010.
Для программистов
ASP.NET MVC Framework - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
ASP.NET MVC предлагает разработчику гибкий механизм управления проверкой параметров запроса. Для такого управления существует атрибут ValidateInputAttribute
. Для демонстрации действия этого атрибута добавим в нашу форму редактирования параметров Select.aspx
возможность редактирования поля Comment
, которое будет содержать любой текст, в том числе и с HTML-разметкой. Данное поле будет выводиться вместе с отображаемым именем пользователя, играя роль сообщения для пользователя.
Изменим форму ввода, добавив следующий фрагмент кода:
Комментарий
Соответственно изменим определение действия Update
контроллера AdminController:
[AcceptVerbs(HttpVerbs.Post)]
[Authorize(Users = "Admin")]
[ValidateAntiForgeryToken]
public ActionResult Update(Guid? userId, string email,
string comment, bool isApproved, bool isLockedOut)
{
if (!userId.HasValue)
throw new HttpException(404, "Пользователь не найден");
MembershipProvider mp = Membership.Provider;
MembershipUser user = mp.GetUser(userId, false);
user.Email = email;
user.Comment = comment;
user.IsApproved = isApproved;
if (user.IsLockedOut && !isLockedOut) user.UnlockUser();
mp.UpdateUser(user);
return RedirectToAction("Index");
}
Для того чтобы пользователь видел сообщение, модифицируем частичное представление LogOnUserControl.ascx
так, как показано в листинге 4.4.
Листинг 4.4. Представление LogOnUserControl.ascx
Welcome !
[ ]
}
else {
%>
[ ]
После запуска попробуем добавить в поле комментария для любого из пользователей значение добрый день!
и сохранить изменения. Так как механизм проверки ввода включен по умолчанию, мы получим сообщение об ошибке (рис. 4.9).
Чтобы отключить проверку ввода для данного действия, для него необходимо добавить атрибут validateinputAttribute
так, как показано во фрагменте:
[AcceptVerbs(HttpVerbs.Post)]
[Authorize(Users = "Admin")]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Update(Guid? userId, string email,
string comment, bool isApproved, bool isLockedOut)
Атрибут ValidateInput
с параметром false указывает механизму ASP.NET MVC на то, что проверка параметров запроса для данного действия не требуется. После указания этого значения атрибута мы сможем задавать для значения Comment
данные с HTML-тегами. Сообщение будет выведено рядом с именем пользователя, как показано на рис. 4.10.
Механизм атрибута ValidateInputAttribute
позволяет в ряде случаев предоставить пользователю больший функционал, но использовать его следует с большой осторожностью. Отключая встроенный механизм проверки параметров запроса на опасное содержимое, вы таким образом берете на себя все проверки, связанные с вопросами безопасности. ValidateInputAttribute
с параметром false должен использоваться только в тех местах, где он действительно необходим, в общем случае его применение не рекомендуется и его следует избегать.
Атрибуты ActionFilterAttribute и OutputCacheAttribute
Существует еще один способ расширения механизма ASP.NET MVC. Через атрибут ActionFilterAttribute
разработчик может задать выполнение кода по нескольким событиям, происходящим при работе механизма MVC. Вот следующие события, на которые можно реагировать с помощью определения атрибута ActionFilterAttribute
: перед выполнением действия, после выполнения действия, перед исполнением результата и после исполнения результата.
Атрибут ActionFilterAttribute
представляет собой абстрактный класс с четырьмя виртуальными методами: OnActionExecuting
, OnActionExecuted, onResultExecuting, onResultExecuted
. Реализация атрибута ложится на плечи разработчика. Обработка этих событий может быть полезна, например, для реализации механизма логов с целью вычисления времени исполнения действий. Другим вариантом использования может быть модификация HTTP-заголовков для ответа клиенту. Таким образом работает включенный в состав ASP.NET MVC атрибут OutputCacheAttribute
.
OutputCacheAttribute
предназначен для управления стандартными HTTP-заголовками, влияющими на кэширование веб-страниц браузером пользователя. Разработчикам классического ASP.NET этот механизм знаком по директиве @ OutputCache
для ASPX-страниц и ASCX-компонентов. OutputCacheAttribute
может быть определен как для класса контроллера, так и для отдельного действия. Для управления действием у OutputCacheAttribute
есть ряд параметров:
□ Duration
— значение времени в секундах, на которое производится кэширование;
□ Location
— значение перечисления OutputCacheLocation
, которое определяет местоположение для кэшированного содержимого: на стороне клиента или сервера. По умолчанию устанавливается значение OutputCacheLocation.Any
, это означает, что содержимое может кэшироваться в любом месте;
□ Shared
— булево значение, которое определяет, может ли использоваться один экземпляр кэшированного значения для многих страниц. Используется, когда действие возвращает результат в виде не целой страницы, а в виде частичного результата;
□ VaryByCustom
— любой текст для управления кэшированием. Если этот текст равен browser
, то кэширование будет производиться условно по имени браузера и его версии (major version). Если у VaryByCustom
будет указана строка, то вы обязаны переопределить метод GetVaryByCustomString
в файле Global.asax для осуществления условного кэширования;
□ varyByHeader
— строка с разделенными через точку с запятой значениями HTTP-заголовков, по которым будет производиться условное кэширование;
□ varyByParam
— задает условное кэширование, основанное на значениях строки запроса при GET или параметрах при POST;
□ varyByContentEncodings
— указывает условие кэширования в зависимости от содержимого директивы HTTP-заголовка Accept-Encoding;
□ CacheProfile
— используется для указания профиля кэширования заданного через web.config и секцию caching;
□ NoStore
— принимает булево значение. Если значение равно true, то добавляет в директиву HTTP-заголовка Cache-Control параметр no-store;
□ SqlDependency
— строковое значение, которое содержит набор пар строк "база данных" и "таблица", от которых зависит кэшируемое содержимое. Позволяет управлять кэшированием на основе изменений определенных таблиц в базе данных.
В качестве примера рассмотрим следующий фрагмент кода, в котором устанавливается кэширование 1800 секунд (30 минут) любого результата контроллера AdminController
вне зависимости от параметров запроса:
[OutputCache(Duration = 1800, VaryByParam = ="none")]
public class AdminController : Controller
В другом фрагменте, наоборот, с помощью атрибута OutputCacheAttribute
отключается любое кэширование результатов контроллера AdminController
:
Интервал:
Закладка: