C# ASP.NET:在加载父页之前运行

C# ASP.NET:在加载父页之前运行,c#,asp.net,C#,Asp.net,我在用户控件中有一段代码,通常应该放在页面加载中(初始化其他组件,如下拉列表等),但我需要在承载此控件的页面的页面加载之前执行此操作 我试着把这个放在Page_Init中: protected void Page_Init(object sender, EventArgs e) { if (!IsPostBack) { Methods.PopulateWhatList(cboWhatList0, cboWhatList1, fldWhat, Request["WhatId"],

我在用户控件中有一段代码,通常应该放在页面加载中(初始化其他组件,如下拉列表等),但我需要在承载此控件的页面的页面加载之前执行此操作

我试着把这个放在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);
 }

在某些回发中没有被调用吗?(按下链接按钮时?

页面生命周期是这样的:页面的页面加载在控件的页面加载之前运行

如果您需要在页面加载之前初始化数据源,那么可以将该初始化放在OnInit中,前提是您确保先调用base.OnInit()。理想情况下,您应该保留对页面加载机制的数据绑定调用,以确保viewstate没有问题


关于渲染方法。“启用”方法在整个页面生命周期中的作用是什么?

我将尝试粗略猜测您想要做什么,并提出解决方案:

页面_Init
中,您正在填充页面上各种控件的内容。您依赖于URL参数,因此使用
if(!IsPostBack)
子句

在Page_Init之后,某些控件处于禁用状态,因此需要在呈现方法中启用它们

在LinkButton上进行回发时,在下一页呈现时不会看到填充的下拉列表

您所经历的是,禁用的控件不会持久化到ViewState。由于在呈现之前调用SaveViewState,因此在页面生命周期中启用控件的时间太晚

如果将
方法.EnableValidation…
调用移动到页面上的Pre_Render方法,则控件状态将持久化为ViewState


修复之后,您应该将Page_Init方法中的代码移动到Page_Load方法,它就属于这个方法。这样,如果您在回发中,您的控件数据将从ViewState加载。

您是说在某些回发中没有调用整个渲染方法,还是说(我假设)在EnableValidation\u列表方法中添加了验证例程?另外,您在每个方法中对不同的下拉菜单执行操作-正确吗?我猜您是在控制生命周期的其他地方设置cbo__列表1的内容?启用验证列表实际上在做什么?