Обработчик Application_BeginRequest()
- это первый шаг в жизненном цикле Asp. Net. Смотрите здесь:
https://docs.microsoft.com/en-us/iis/application-frameworks/building-and-running-aspnet-applications/aspnet-integration-with-iis
Когда выполняется обработчик (это ваша страница), он имеет свой собственный жизненный цикл:
https://docs.microsoft.com/en-us/previous-versions/ms178472 (v = vs.140)? Redirectedfrom = MSDN
И эта документация гласит:
Start
На начальном этапе , свойства страницы, такие как запрос и ответ установлены. На этом этапе страница также определяет, является ли запрос обратной передачей или новым запросом, и устанавливает свойство IsPostBack. На странице также устанавливается свойство UICulture.
Когда проверяются доступные события, мы видим:
PreInit
Повышено после завершения этапа запуска и до начала этапа инициализации.
Следовательно; кажется, что самая ранняя стадия, которую вы можете изменить UICulture
, это PreInit
стадия. Однако наиболее подходящим местом является метод InitializeCulture
, который служит для этой конкретной цели c:
public partial class _Default : Page
{
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
HttpCookie languageCookie = Request.Cookies["lang"];
if (languageCookie != null)
{
if (languageCookie.Value == "en")
{
base.Culture = base.UICulture = CultureInfo.GetCultureInfo("en-US").Name;
}
}
}
protected override void InitializeCulture()
{
// Or do it here. This is more appropriate.
}
...
...
}
РЕДАКТИРОВАТЬ:
Несмотря на то, что информация о культуре распространяется на несколько страниц, информация о культуре не должна быть установленным в обработчиках событий главной страницы, потому что, как видно из следующего вывода трассировки, когда страница использует главную страницу, главная страница интерпретируется как элемент управления страницы, а событие Page_Load
этой главной страницы выполняется во время LoadControls (), который выполняется после обработчика страницы Page_Load
.
Я также хочу упомянуть здесь функцию трассировки. Включив трассировку, можно увидеть много информации о процессе выполнения страницы, ее дочерних элементах, всех таймингах, заголовках и т. Д. c.:
В файле web.config в разделе <system.web>
:
<trace pageOutput="true" requestLimit="10" enabled="true" localOnly="true" traceMode="SortByTime" mostRecent="true"/>
Или читайте здесь для <system.webServer>
эквивалента:
https://docs.microsoft.com/en-us/iis/configuration/system.webserver/tracing/
Control Tree
Control UniqueID Type Render Size Bytes (including children) ViewState Size Bytes (excluding children) ControlState Size Bytes (excluding children)
__Page ASP.default_aspx 1104 0 0
ctl00 ASP.masterpage_master 1104 0 0
ctl00$ctl02 System.Web.UI.LiteralControl 68 0 0
ctl00$ctl00 System.Web.UI.HtmlControls.HtmlHead 48 0 0
ctl00$ctl01 System.Web.UI.HtmlControls.HtmlTitle 29 0 0
ctl00$head System.Web.UI.WebControls.ContentPlaceHolder 6 0 0
ctl00$head$ctl00 System.Web.UI.LiteralControl 6 0 0
ctl00$ctl03 System.Web.UI.LiteralControl 14 0 0
form1 System.Web.UI.HtmlControls.HtmlForm 954 0 0
ctl00$ctl04 System.Web.UI.LiteralControl 21 0 0
ctl00$ContentPlaceHolder1 System.Web.UI.WebControls.ContentPlaceHolder 291 0 0
ctl00$ContentPlaceHolder1$ctl00 System.Web.UI.LiteralControl 198 0 0
ctl00$ContentPlaceHolder1$hdn1 System.Web.UI.WebControls.HiddenField 91 0 0
ctl00$ContentPlaceHolder1$ctl01 System.Web.UI.LiteralControl 2 0 0
ctl00$ctl05 System.Web.UI.LiteralControl 18 0 0
ctl00$ctl06 System.Web.UI.LiteralControl 20 0 0