Есть ли функция, вызываемая в любое время, когда ЛЮБАЯ страница загружается в ваше приложение?

Я хочу иметь возможность запускать скрипт в любое время, когда ЛЮБАЯ страница загружается в приложение. Есть ли место, где я могу просто добавить это? Или мне нужно добавлять код при каждой загрузке страницы?


person Hazior    schedule 24.02.2010    source источник
comment
Не забывайте, однако, что если вы используете AJAX, могут быть запросы на вещи, которые не являются страницей, просто как то, что нужно учитывать.   -  person JB King    schedule 24.02.2010


Ответы (5)


Вы можете сделать одно из трех действий:

  1. Используйте базовую страницу в вашего приложения, и все страницы вашего приложения наследуются от него. В событии page_load на базовой странице сделайте то, что вам нужно сделать. Убедитесь, что наследующие страницы в вашем приложении вызывают событие page_load базовой страницы, если они переопределяют page_load (обычно так и есть). И поскольку page_load используется слишком часто, я дам соответствующий совет, чтобы посмотреть на все события страницы (особенно особенно page_prerender), если другой подходит больше.

  2. Используйте события, которые возникают на странице global.asax. , которые происходят всякий раз, когда получен запрос. Проверьте событие Application_BeginRequest. Но там много событий, так что проверьте их все на случай, если другое событие больше подходит для вашей ситуации. (Как и в случае с обычными событиями страницы, не приобретайте дурную привычку всегда использовать одно и то же событие.)

  3. Есть шанс, что то, что вы хотите, должно происходить каждый раз на главной странице, особенно если это связано с макетом. Страницы-шаблоны кажутся милыми, но зарекомендовали себя в хорошем дизайне. Если вы используете событие page_load главной страницы для общих функций, вам не нужно вызывать его из события page_load каждой страницы содержимого; он срабатывает каждый раз, когда после вызываемой страницы событие page_load. (Я упоминаю об этом, потому что поначалу легко спутать мастер-страницы и базовые страницы.)

person Patrick Karcher    schedule 24.02.2010
comment
В итоге я использовал главную страницу, поскольку она относилась к ней. Но я просматривал global.asax, прежде чем спрашивать. Хотя не смог найти. Бесконечно благодарен. - person Hazior; 24.02.2010
comment
Да, это случается с каждым из нас. Где это находится!?! Хотя это специальный файл, о котором знает VS, по умолчанию его там нет. Приложению .net не нужен файл global.asax. В версии 2008 перейдите в меню "Файл", "Новый файл" и выберите класс глобального приложения. В 2005 году, я думаю, вы делаете «Файл», «Создать», «Файл», а затем выбираете его. - person Patrick Karcher; 24.02.2010

Вы можете использовать событие BeginRequest в файле Global.asax.

http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest.aspx

person Fitzchak Yitzchaki    schedule 24.02.2010

Вы также можете создать и зарегистрировать модуль HTTP. . Преимущество этого в том, что они зарегистрированы в web.config, поэтому вы можете добавлять и удалять их во время выполнения, если хотите... и иметь более одного.

person Nick    schedule 24.02.2010

Вы можете создать общий базовый класс для своих страниц, унаследованный от System.Web.UI.Page, и добавить туда код в обработчике OnLoad.

person Ray    schedule 24.02.2010

Вы можете использовать PageAdapters для внедрения кода в каждый запрос страницы aspx, перехватывая любой метод жизненного цикла страницы ASP.Net.

Эта статья поможет вам понять, как он работает: http://dotnet.org.za/hiltong/archive/2008/01/06/injecting-a-page-base-class-in-asp-net.aspx

С уважением.

person Shoaib Shaikh    schedule 24.02.2010