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

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

Жанры

Шрифт:

? Prefix — позволяет переопределить префикс при сопоставлении по умолчанию;

? Include — позволяет определить список допустимых параметров, которые будут участвовать в сопоставлении, остальные параметры, не входящие в этот список, рассматриваться не будут;

? Exclude — позволяет определить "черный" список параметров, которые не должны участвовать в процессе сопоставления. Такие параметры будут игнорироваться.

Использование параметра Prefix позволяет применять в представлении префикс для элементов формы, отличный от имени параметра метода действия. Например, вместо префикса userData в рассмотренном ранее примере, мы могли бы использовать сокращенный префикс ud, определив все элементы управления формы в подобном виде:

<%= Html.Hidden("ud.UserId", (Guid)user.ProviderUserKey)%>

Чтобы механизм Model Binder по умолчанию узнал про наш новый префикс, необходимо задать атрибут BindAttribute в требуемом месте при определении параметров метода действия:

public ActionResult Update([Bind(Prefix = "ud")] UserData userData)

Параметры Include и Exclude атрибута BindAttribute могут быть полезны в тех случаях, когда необходимо избежать автоматического сопоставления в комплексном типе для каких-то определенных свойств. Это может потребоваться для обеспечения безопасности или по каким-то другим соображениям. Например, чтобы запретить сопоставление свойства IsLockedOut, мы можем указать атрибут BindAttribute следующим образом:

public ActionResult Update(

[Bind(Exclude = "IsLockedOut")] UserData userData)

Иногда требуется задать определенный список разрешенных для сопоставления параметров. Для этого используется параметр Include, которому можно задать список разрешенных для сопоставления свойств. В следующем примере мы разрешаем для сопоставления только два свойства: Userid и Email:

public ActionResult Update(

[Bind(Include = "UserId, Email")] UserData userData)

Механизм сопоставления комплексных параметров форм с параметрами методов действий в MVC Framework значительно упрощается с помощью встроенного средства DefaultModelBinder. Этот механизм может гибко настраиваться с помощью атрибута BindAttribute, который позволяет задавать списки допустимых и недопустимых для сопоставления свойств и, вдобавок к этому, переопределять префикс, используемый в представлении. Если же разработчику недостаточно функционала механизма Model Binding по умолчанию, он волен переопределить этот механизм своей реализацией и использовать его как глобально во всем приложении, так и определяя его для конкретного параметра определенного действия.

Советы по использованию контроллеров

Атрибуты ActionNameSelectorAttribute и ActionNameAttribute

В механизме MVC существует множество полезных функций. Одна из них — это атрибут ActionNameAttribute, являющийся реализацией атрибута ActionNameSelectorAttribute — механизма MVC Framework, который позволяет ограничить выбор методов класса контроллера при определении нужного.

Атрибут ActionNameSelectorAttribute содержит всего один метод IsValidName со следующим определением:

public abstract bool IsValidName(ControllerContext controllerContext,

string actionName, MethodInfo methodInfo);

При поиске необходимого для выполнения действия механизм MVC Framework, кроме всего прочего, проверит все действия на наличие атрибута, реализующего ActionNameSelectorAttribute. В случае, когда такой атрибут найден, у него вызывается метод IsValidName для проверки на соответствие действия требуемому имени.

Единственная реализация ActionNameSelectorAttribute, существующая в MVC Framework, — это атрибут ActionNameAttribute, который призван предоставить возможность создания псевдонимов для методов действий. Рассмотрим следующий фрагмент кода:

[ActionName("UserList")]

public ActionResult GetUserListFromCache

Здесь методу GetuserListFromCache, который представляет собой действие контроллера, присваивается укороченный псевдоним userList. После этого в ответ на запрос действия UserList контроллером может быть вызван метод GetuserListFromCache.

Наследование контроллеров

При работе с контроллерами в MVC Framework полезной практикой является механизм наследования контроллеров. Так как контроллеры представляют собой классы, преимущества наследования контроллеров схожи с преимуществами наследования классов в C#. Основным таким преимуществом является возможность создания базового набора правил для некоторого количества контроллеров. Для этого в MVC Framework можно определить контроллер, который будет называться базовым, и наследовать все остальные контроллеры от него.

Далее перечислены примеры возможных функций базовых контроллеров:

? хранение и предоставление информации о текущем пользователе и его правах;

? предоставление информации о базовых настройках приложения, которые могут поставляться, например, из web.config;

? экземпляры хранилищ кода для работы с разнообразным функционалом: от пользователей до специфических данных приложения;

? вспомогательные статические или другие методы утилитарного характера;

? определение набора атрибутов, которые будут наследовать потомки базового контроллера.

Рассмотрим простейший пример базового контроллера. Для этого определим для него набор функционала: обработку ошибок, GZip-сжатие результатов действий, вспомогательную функцию для работы с пользователем и загрузчик некоторых параметров из файла web.config.

Листинг 4.7. Базовый контроллер

[HandleError(View = "AdminError")]

[GZipCompress]

public class BaseController : Controller

{

public NameValueCollection Settings

{

get

{

return ConfigurationManager.AppSettings;

}

}

public string UserNotFoundMessage

{

get

{

return Settings["userNotFoundMessage"];

}

}

public readonly MembershipProvider MP = Membership.Provider;

public virtual ActionResult Index

{

return View;

}

public static MembershipUser GetUser(string userName)

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

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Я — Легион

Злобин Михаил
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Я — Легион

Я бог. Книга XXXIX

Дрейк Сириус
39. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я бог. Книга XXXIX

Оборотень

Сухов Евгений Евгеньевич
10. Я – вор в законе
Детективы:
боевики
5.89
рейтинг книги
Оборотень

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Жертва

Привалов Сергей
2. Звездный Бродяга
Фантастика:
боевая фантастика
космическая фантастика
рпг
попаданцы
6.25
рейтинг книги
Жертва

Монстр из прошлого тысячелетия

Еслер Андрей
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Монстр из прошлого тысячелетия

Обреченная

Макдевит Джек
2. Космоархеологи
Фантастика:
научная фантастика
7.00
рейтинг книги
Обреченная

Старый, но крепкий 2

Крынов Макс
2. Культивация без насилия
Фантастика:
рпг
уся
эпическая фантастика
5.00
рейтинг книги
Старый, но крепкий 2

Газлайтер. Том 23

Володин Григорий Григорьевич
23. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Газлайтер. Том 23

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Хозяин зеркал

Зонис Юлия
Фантастика:
социально-философская фантастика
7.57
рейтинг книги
Хозяин зеркал

Аввакум

Бахревский Владислав Анатольевич
Проза:
историческая проза
7.00
рейтинг книги
Аввакум

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера