Asp.net mvc framework
Шрифт:
Следует учесть, что перегрузка запросов возможна только для POST-запросов. Во всех других случаях скрытый параметр X-HTTP-Method-Override игнорируется.
DefauItValueAttribute
С помощью атрибута System.ComponentModel.DefaultValueAttribute в MVC 2 становится возможным указывать значения по умолчанию для параметров действий.
public class ArticleController
{
public ActionResult View(int id, [DefaultValue(1)]int page)
{
}
}
В
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, который позволяет фильтрам авторизации отрабатывать ситуации, когда авторизация была провалена;
? новый метод Add(stringkey, object value) у класса ValueProviderDictionary, который позволяет проще задавать значения для экземпляров класса;
? новое свойство ActionDescriptor в классе AuthorizationContext;
? метод Controller.Execute теперь вызовет исключение в ситуации, когда он вызван более одного раза в одном экземпляре. Это означает явное ограничение на вызов единственного экземпляра контроллера на каждый запрос;
? класс Controller более не наследуется от MarshalByRefObject;
? конструктор AuthorizationContext(ControllerContext context)
объявлен устаревшим, вместо него предлагается использовать вариант с двумя параметрами;? внесены изменения в типы моделей так, что они теперь могут быть не только ссылочными типами, но и значениями. Например, в MVC 2 можно будет использовать System.Int32 как тип модели;
? поиск контроллеров в пространстве имен, указанном при регистрации маршрутов, теперь будет выполняться и в подпространствах имен.
Кроме нововведений, MVC 2 содержит изменения, которые "ломают" совместимость с существующим кодом:
? из класса DefaultControllerFactory исключено свойство RequestContext, вместо этого значение RequestContext передается в методы GetControllerinstance и GetControllerType. Это изменение нарушает работу пользовательских вариантов фабрики контроллеров, которые наследовались от класса DefaultControllerFactory;
? строковое значение area в MVC 2 стало зарезервированным значением, которое нельзя использовать в качестве параметров маршрута при создании маршрутизации. В этом area стало похоже на бывшие ранее зарегистрированными строки controller и action;
? методы расширения хелпер-классов (вспомогательных классов) отныне возвращают MvcHtmlString, вместо строки. Это нововведение рассчитано на использование в окружении ASP.NET 4.0 для получения преимуществ от нового синтаксиса элементов HTML-кодирования;
? действия, которые возвращают JsonResult, в MVC 2 обязаны вызываться только в ответ на POST-запросы, это ограничение введено в целях повышения безопасности, поскольку обнаружены новые типы атак JSON Hijacking, осуществляемые при GET-запросах JSON-данных. Однако MVC 2 будет поддерживать способ обойти это ограничение через использование свойства JsonRequestBehavior у класса JsonResult;
? свойства Model и ModelType объявлены устаревшими, вместо них предлагается использовать новое свойство ModelMetadata, которое содержит в себе данные Model и ModelType.
Нововведения Visual Studio 2010
Релиз Visual Studio 2010 будет содержать финальную версию ASP.NET MVC 2. Для более полной поддержки работы с MVC в Visual Studio 2008 и 2010 будут внесены некоторые изменения: введена поддержка создания областей с помощью элементов интерфейса и помощников, добавлены сниппеты (snippet — фрагмент) для быстрого создания кусочков кода.
Кроме того, MVC 2 будет содержать новый тип проекта, который будет представлять собой облегченный, "пустой" вариант текущего проекта MVC. В нем будут отсутствовать готовые контроллеры AccountController, HomeController и не будет готовых представлений или элементов страниц MasterPage.
Visual Studio 2010 получит новый профиль среды разработки под названием Web Development (Code Optimized). Профиль среды разработки определяет набор инструментов и внешний вид Visual Studio. Профиль Code Optimized оптимизирован для более удобного набора кода и увеличения рабочего пространства за счет сокрытия панелей с кнопками и элементами управления.