Гайдар Магдануров - 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 - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
MembershipUser user = mp.GetUser(userName, false);
UserData userData = new UserData()
{
Comment = user.Comment,
Email = user.Email,
IsApproved = user.IsApproved,
IsLockedOut = user.IsLockedOut
};
return Json(userData, null, Encoding.UTF8);
}
В представленном фрагменте кода для передачи набора данных о пользователе в виде JSON-данных используется единственный метод Json, которому передается набор данных. Результатом, который получит пользователь в ответ, например, на такой запрос http://localhost:5434/Admin/SelectUserData?userName=adminбудет текст в следующем формате:
{"UserId":null,"Email":"vyunev@live.ru","Comment":"","IsApproved":true, "IsLockedOut":false,"CurrentMembershipUser":null}
FileResult
Очень часто в ответ на запрос пользователя требуется вернуть не HTML-страницу или данные в формате JSON, а какой-нибудь бинарный файл. FileResult
— это механизм, который как раз и позволяет возвратить файл как результат работы действия контроллера.
У FileResult
есть два важных свойства, которые требуется указывать при возвращении результата действия:
□ contentType
— свойство, которое задается через конструктор класса FileResult
и не может быть изменено напрямую. ContentType
указывает MIME-тип содержимого передаваемого файла;
□ FileDownloadName
— свойство, указывающее на файл, который требуется передать в ответ на запрос.
Рассмотрим использование FileResult
на следующем примере. Пусть нам требуется на пользовательский запрос возвращать сопоставленный с пользователем рисунок. Реализуем эту возможность с помощью файловой системы. Для этого создадим в корне проекта папку Admin
, в которой будем хранить рисунки пользователей в формате PNG с именем вида: GUID пользователя.рng. Действие GetUserImage
контроллера AdminController
, которое будет возвращать изображение с помощью FileResult
, представлено в следующем фрагменте:
public ActionResult GetUserImage(string userName)
{
if (string.IsNullOrEmpty(userName))
throw new HttpException(404, "Пользователь не найден");
MembershipProvider mp = Membership.Provider;
MembershipUser user = mp.GetUser(userName, false);
if (user == null)
throw new HttpException(404, "Пользователь не найден");
string userGuidString = ((Guid) user.ProviderUserKey).ToString();
string fileName = userGuidString + ".png";
return File(fileName, "image/png");
}
Обратите внимание, что для возвращения результата типа FileResult
в примере используется стандартный метод контроллера File
, который упрощает возврат результата в виде FileResult
. Методу File
передается два параметра: путь к возвращаемому файлу и его MIME-тип, который в данном случае для PNG-файла равен image/png.
В MVC Framework существует еще один класс для работы с файлами — класс FileContentResult
, который наследует от FileResult
и позволяет возвращать данные не на основании пути к файлу, а с помощью существующего потока данных, который может генерироваться в самом действии.
RedirectResult и RedirectToRouteResult
Важным свойством MVC Framework является возможность перенаправлять запрос на другие действия контроллеров либо другие URL-адреса. Для этого в MVC встроены механизмы RedirectResult
и RedirectToRouteResult
, которые наследуют от ActionResult
и являются допустимыми результатами работы любого действия.
RedirectResult
предназначен для того, чтобы возвратить результат пользователю в виде перенаправления на заданный адрес URL. У RedirectResult
есть только одно свойство, которое инициализируется через конструктор, — Url
, оно указывает строку адреса, на которую будет перенаправлен пользователь в ответ на запрос. Контроллеры MVC содержат стандартный метод Redirect
, который формирует ответ в виде RedirectResult
. В следующем фрагменте приведено действие, результатом которого является перенаправление пользователя на сайт http://www.asp.net/mvc/:
public ActionResult GetAspNetSite()
{
return Redirect(" http://www.asp.net/mvc/");
}
RedirectToRouteResult
выполняет схожую по смыслу с RedirectResult
логику, но перенаправление вызова RedirectToRouteResult
производится только на основании маршрутов таблицы маршрутизации. RedirectToRouteResult
имеет два конструктора, с разным числом параметров, всего параметров два:
□ routeName
— указывает наименование маршрута, на который нужно выполнить перенаправление запроса;
□ routeValues
— указывает набор значений параметров маршрута типа RouteValueDictionary
, с помощью которых производится поиск маршрута и выполняется перенаправление.
Для упрощения работы с RedirectToRouteResult
механизм MVC реализует для контроллеров, наряду с методами RedirectToRoute
, набор стандартных методов RedirectToAction
, которые призваны облегчить формирование перенаправления вызова на другие действия или контроллеры. Например, следующий фрагмент кода перенаправляет вызов из текущего действия в действие Index
текущего контроллера:
return RedirectToAction("Index");
При использовании RedirectToAction
можно указывать и контроллер, в который требуется перенаправить вызов, кроме того, можно указать набор значений параметров маршрута типа RouteValueDictionary
. Следующий пример кода перенаправит вызов на действие Index
контроллера AccountController
:
return RedirectToAction("Index", "Account");
ContentResult
ContentResult
— это весьма простая реализация ActionResult
, которая предназначена для того, чтобы в ответ на запрос передавать любой пользовательский строковый набор данных. Для реализации логики у ContentResult
есть три свойства:
□ ContentType
— MIME-тип передаваемых в ответ на запрос данных;
□ ContentEncoding
— кодировка данных;
□ Content
— строка данных для передачи в ответ на запрос.
Благодаря ContentResult
разработчик получает возможность генерировать ответы на запросы в любом виде, который можно представить в виде строки текста. Этот тип ActionResult
может быть полезен при работе с механизмом RenderAction
. RenderAction
— это часть библиотеки MVCContrib, которая содержит расширения MVC Framework, не вошедшие в основной функционал. RenderAction
позволяет представлению вывести в месте вызова результат выполнения действия. При таком применении результат типа ContentResult
подходит более всего. Для упрощения контроллеры содержат специальный метод Content
, который возвращает значение типа ContentResult
.
EmptyResult
Последний из рассмотренных стандартных вариантов ActionResult
— это EmptyResult
. Этот механизм предназначен для того, чтобы в ответ на запрос не возвращать ничего. Переопределенный в EmptyResult
метод ExecuteResult
не содержит ни строчки кода.
Создание своей реализации ActionResult
Важной особенностью механизма ActionResult
является то, что вы можете создать свой собственный вариант, который будет формировать результат в том виде, который вам нужен. Например, вы можете разработать класс, наследующий ActionResult
, который будет возвращать клиентам результаты запроса в виде XML-разметки. Классическим примером создания своего варианта ActionResult
является реализация класса, который на запрос пользователя создает ответ в виде RSS-ленты. Продемонстрируем реализацию такого класса, добавив к нашему контроллеру AdminController
действие Rss
, которое будет возвращать пользователю RSS-ленту со списком зарегистрированных пользователей.
Интервал:
Закладка: