Чтение онлайн

на главную - закладки

Жанры

Шрифт:

public decimal Cost { get; set; }

public DateTime UpdatedAt { get; set; }

}

public class ProductMetadata

{

[DisplayName("Идентификатор")]

[HiddenInput]

public int Id { get; set; }

[DisplayName("Наименование товара")]

[Required(ErrorMessage = "Не указано наименование")]

public string Name { get; set; }

[DisplayName("Описание")]

public string Description { get; set; }

[DisplayName("Цена")]

[Required(ErrorMessage="Не

указана цена")]

public decimal Cost { get; set; }

[DisplayName("Дата обновления")]

[HiddenInput(DisplayValue=false)]

public DateTime UpdatedAt { get; set; }

}

}

Обратите внимание на выделенную строку [MetadataType(typeof (ProductMetadata))]. Атрибут MetadataType используется для того, чтобы показать механизму ASP.NET MVC, в каком классе следует искать метаданные. После выполнения кода мы убедимся, что перемещение метаданных из класса Product в класс ProductMetadata никак не отразилось на результате. Данные метаинформации стали потребляться из класса ProductMetadata, что и требовалось достичь.

Новые атрибуты

ASP.NET MVС 2 представляет набор новых атрибутов для разнообразных сфер применения. Далее вы найдете более полное описание.

Http***Attribute и перегрузка типов запросов

Ранее в ASP.NET MVC для ограничения выполнения действия в ответ на тип запроса применялся атрибут AcceptverbsAttribute с параметрами из перечисления HttpVerbs. В ASP.NET MVC 2 представлены альтернативные атрибуты для короткой записи: HttpPostAttribute, HttpPutAttribute, HttpGetAttribute, HttpDeleteAttribute.

Кроме атрибутов сокращенной формы, ASP.NET MVC 2 предлагает еще один механизм работы с запросами, который нацелен на REST-сценарии. При работе с REST-приложениями важной задачей ставится правильное оперирование типами запросов. Однако не все браузеры поддерживают типы запросов типа PUT или DELETE. Для преодоления этой проблемы в MVC 2 вводится новый метод расширения Html.HttpMethodOverride, который используется для перегрузки типа запроса, применяемого на форме. Например, в следующем коде формируется POST-форма (по умолчанию) с перегрузкой параметра запроса в PUT с помощью Html.HttpMethodOverride:

<% using(Html.BeginForm) {%>

<%= Html.HttpMethodDverride(HttpVerbs.Put) %>

<%} %>

Этот механизм работает следующим образом: вызов Html.HttpMethodOverride формирует на форме следующее скрытое поле:

<input name="X-HTTP-Method-Override" type="hidden" value="PUT" />

При получении запроса с формы ASP.NET MVC ищет скрытое поле со значением X-HTTP-Method-Override и, если оно найдено, предполагает, что запрос представляет собой тип, указанный в скрытом поле. Таким образом, указанный ранее пример вызовет действие, помеченное

атрибутом HttpPut, но не HttpPost, т. к. форма содержит перегруженный тип запроса. Перегрузка значения может выполняться не только с помощью скрытого поля, но и с помощью заголовков HTTP или параметров строки запроса.

Следует учесть, что перегрузка запросов возможна только для POST-запросов. Во всех других случаях скрытый параметр X-HTTP-Method-Override игнорируется.

DefauItValueAttribute

С помощью атрибута System.ComponentModel.DefaultValueAttribute в MVC 2 становится возможным указывать значения по умолчанию для параметров действий.

public class ArticleController

{

public ActionResult View(int id, [DefaultValue(1)]int page)

{

}

}

В приведенном ранее примере для параметра page определяется значение по умолчанию, которое следует использовать в случаях, когда запрос не содержал явного указания значения для данного параметра. Эта задача может быть решена для всех действий сразу через создание параметров маршрутизации по умолчанию. Но в случаях, когда требуется создать разные значения по умолчанию для разных действий, может быть использован атрибут DefaultValue.

RequireHttpsAttribute

Новый атрибут RequireHttpsAttribute в MVC 2 позволит вам пометить действия, вызов которых должен быть произведен только по защищенному протоколу HTTPS.

Улучшения в связывании данных

ASP.NET MVC 2 предоставит новую возможность по связыванию данных. Теперь в MVC 2 связывание данных возможно и с бинарными типами данных, представленными byte[] и System.Data.Linq.Binary. Для этих целей введены два новых перегруженных метода расширения Hidden:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);

public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);

После использования этих методов для бинарных данных в разметке будет произведен рендеринг скрытого элемента hidden со строкой данных, закодированной по base-64. После отправки запроса с формы, которая содержит данный скрытый элемент, его данные будут декодированы и связаны с соответствующим значением модели.

Прочие улучшения в API

Кроме перечисленных ранее значительных нововведений, ASP.NET MVC 2 предложит еще ряд менее значительных изменений в API:

? новый защищенный виртуальный метод createActioninvoker в классе controller, который вызывается свойством Actioninvoker и позволяет создавать отложенное создание экземпляра (instantiation) инициатора, если он не установлен;

? новый защищенный виртуальный метод OnAuthorizationFailed в классе AuthorizationFilter, который позволяет фильтрам авторизации отрабатывать ситуации, когда авторизация была провалена;

Поделиться:
Популярные книги

Большая Советская Энциклопедия (СО)

Большая Советская Энциклопедия
Справочная литература:
энциклопедии
5.00
рейтинг книги
Большая Советская Энциклопедия (СО)

Эффект Этоса

Модезитт Лиланд Экстон
2. Подобно Войне за Веру
Фантастика:
боевая фантастика
5.00
рейтинг книги
Эффект Этоса

Гоголь

Степанов Николай Леонидович
324. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Гоголь

Берсеркер

Саберхаген Фред
1. Берсеркер
Фантастика:
научная фантастика
7.56
рейтинг книги
Берсеркер

Король звезды

keller nora
Проект «Поттер-Фанфикшн»
Фантастика:
фэнтези
5.00
рейтинг книги
Король звезды

Инквизитор. Омнибус. Пенталогия

Абнетт Дэн
6. Цикл книг про инквизиторов Эйзенхорна и Рейвенора
Фантастика:
боевая фантастика
5.00
рейтинг книги
Инквизитор. Омнибус. Пенталогия

Карл Ругер. Боец

Мах Макс
1. Карл Ругер
Фантастика:
фэнтези
6.50
рейтинг книги
Карл Ругер. Боец

Точка Бифуркации III

Смит Дейлор
3. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации III

Статьи

Переслегин Сергей Борисович
Документальная литература:
публицистика
5.00
рейтинг книги
Статьи

Мир философии

Гуревич Павел Семенович
Научно-образовательная:
философия
5.00
рейтинг книги
Мир философии

Сердце Единорога. Стихотворения и поэмы

Клюев Николай Алексеевич
Поэзия:
поэзия
6.25
рейтинг книги
Сердце Единорога. Стихотворения и поэмы

Будем жить!

Сердюк Алексей
2. Повезло
Фантастика:
боевая фантастика
5.00
рейтинг книги
Будем жить!

Неучтенный элемент. Том 8

NikL
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 8

Сравнительные жизнеописания

Плутарх
Документальная литература:
биографии и мемуары
8.85
рейтинг книги
Сравнительные жизнеописания