Множественный / Stacking PageAdapter в ASP.NET

#asp.net #viewstate

#asp.net #состояние просмотра

Вопрос:

Вопрос в том … могу ли я сложить несколько PageAdapter (ов) в моем ASP.NET веб-сайт? У меня есть проект, в котором уже применяются собственные классы PageAdapter, но мне нужно добавить один для перемещения viewstate, чтобы он сохранялся на сервере (диск, БД, кэш, что угодно). Я сомневаюсь… Если я создам адаптер страницы для браузера «по умолчанию» (то есть для каждого браузера), и в этом проекте уже есть свои адаптеры для разных браузеров для некоторых вещей, будет ли мой адаптер безупречно работать с ними или одновременно может быть только один адаптер страницы?

Ответ №1:

Адаптеры хранятся в HttpCapabilitiesBase.Adapters свойстве как Hashtable . Если вы будете наблюдать за этой коллекцией в debug, вы увидите, что ключом для этого Hashtable является полное имя типа страницы / элемента управления.

Таким образом, невозможно складывать управляющие адаптеры, всегда есть один адаптер для каждого элемента управления одновременно. И определение браузера по умолчанию всегда выигрывает (конечно, за исключением случаев, когда вы заполняете коллекцию адаптеров страниц вручную).

Комментарии:

1. Спасибо … я думаю, это будет проблемой для меня. Я боюсь, что если я добавлю свой адаптер страницы, я нарушу логику существующих. Что вы имеете в виду под «конечно, за исключением случаев, когда вы заполняете коллекцию адаптеров страниц вручную»?

2. Адаптеры @Manight могут быть зарегистрированы программно, обычно в конструкторе страницы или после Request того, как объект доступен. И если ваша задача состоит только в том, чтобы переместить состояние просмотра с клиента на сервер, вы можете использовать технику, описанную в ASP.NET Состояние страницы Сохраняемая статья ( msdn.microsoft.com/en-us/library/aa479403.aspx ).

3. Не знал о добавлении базового типа страницы в web.config … хорошее решение, интересно, как это будет взаимодействовать с другим базовым классом страниц, уже унаследованным от pages.

4. Базовый тип страницы будет работать, только если aspx не содержит Inherits CodeBehind CodeFile атрибутов страницы или .

5. Я так и предполагал… Я думаю, мне придется прибегнуть к адаптеру страницы и в конечном итоге изменить уже существующие файлы .browser. Спасибо за вашу помощь