2009-03-24 10 views
0

У меня есть часть кода в элементах User, которые обычно должны быть помещены в Page_Load (инициализирует другие компоненты, такие как DropDowns и т. Д.), Но мне нужно, чтобы это произошло до того, как страница_Load на странице, на которой находится этот элемент управления.ASP.NET: Запуск до Page_Load от родительской страницы

Я попытался сделать это в Page_Init:

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    Methods.PopulateWhatList(cboWhatList0, cboWhatList1, fldWhat, Request["WhatId"], true); 
    Methods.PopulateWhereList(cboWhereList0, cboWhereList1, fldWhere, Request["WhereId"], true); 
    Methods.PopulateWhoList(cboWho, true, Request["WhoId"]); 
    Methods.PopulateWhenList(cboWhen, true, Request["WhenId"]); 
    Methods.PopulatePriceRangeList(cboPriceRange, true, Request["PriceRangeId"]);  
    } 
} 

... но столкнулись с некоторыми проблемами. Итак, где же самое лучшее место для этого типа кода?

Проблема у меня (и, возможно, не имеет отношения) в том, что мой:

protected override void Render(HtmlTextWriter writer) 
{ 
    Methods.EnableValidationWhereList(cboWhereList1, this.Page); 
    Methods.EnableValidationWhatList(cboWhatList1, this.Page); 
    base.Render(writer); 
} 

не вызывается на определенных постбэков? (При нажатии LinkButton?)

+0

Вы говорите, что весь метод Render не вызван на некоторые обратные вызовы или что процедуры проверки, которые (я предполагаю) добавляются в методы EnableValidation__List? –

+0

Кроме того, вы действуете в разных выпадающих списках в каждом методе - это правильно? Думаю, вы настраиваете содержимое cbo__List1 в другом месте жизненного цикла управления? Что делает EnableValidation__List на самом деле? –

ответ

2

Постараюсь дикое предположение на то, что вы пытаетесь сделать, и предложить решение:

В вашей Page_Init вы заселение содержимое различных элементов управления на странице. Вы зависите от параметров URL-адреса, следовательно, оговорка if(!IsPostBack).

После Page_Init некоторые из ваших элементов управления остаются в отключенном состоянии, поэтому необходимо включить их в методе рендеринга.

Когда вы выполняете обратную передачу в LinkButton, вы не видите свои выпадающие меню, заполненные при отображении следующей страницы.

Что вы испытываете, так это то, что отключенные элементы управления не сохраняются в ViewState. Поскольку SaveViewState вызывается перед Render, вы слишком поздно включаете элементы управления в жизненном цикле страницы.

Если вы вместо этого переместите свои Methods.EnableValidation... вызовы метода Pre_Render на своей странице, состояние управления будет сохраняться в ViewState.

После этого исправления, вы должны переместить свой код в методе Page_Init методу Page_Load, где он принадлежит. Таким образом, ваши данные управления будут загружены из ViewState, если вы находитесь в обратной передаче.

0

Жизненный цикл страницы таков, что page_load страницы выполняется до page_load элементов управления.

Если вам необходимо инициализировать источники данных до загрузки страницы, вы можете поместить эту инициализацию в OnInit при условии, что вы убедитесь, что base.OnInit() вызывается первым. В идеале, вы должны сохранить свои вызовы привязки данных к механизму page_load, чтобы убедиться, что у вас нет проблем с viewstate.

Что касается вашего метода визуализации. Какую цель используют методы «enable» в общем жизненном цикле страницы?

Смежные вопросы