简体   繁体   English

我可以在aspx页面的page_load事件之前调用usercontrol的page_load事件吗?

[英]Can I call page_load event of usercontrol before page_load event of aspx page?

The question is straight forward.Can I call page_load of usercontrol before page_load of aspx page? 问题很简单,我可以在aspx页面的page_load之前调用usercontrol的page_load吗?

EDIT 编辑

Its not possible to call the child's page_load event before parent's page_load. 无法在父级的page_load之前调用子级的page_load事件。

I have this aspx class called just4test for testing puropse. 我有一个名为just4test的aspx类,用于测试钱包。 Its aspx code is: 其aspx代码为:

<body>
  <form id="form1" runat="server">
  <uc1:lcont ID="lcont1" runat="server" />
  <div>

  </div>
  </form>

As you can see it is using a usercontrol file. 如您所见,它正在使用一个usercontrol文件。

And its code behind is : 其背后的代码是:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        lcont1.my_tv_SelectedNodeChanged(sender, e);
    }
 }

Now the usercontrol is: 现在,用户控件为:

public partial class lcont : System.Web.UI.UserControl
{
sql_con sq = new sql_con();
protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        bind_data();
    }
}

public void mytry()
    {
        Console.WriteLine("helo");
    }
public void bind_data()
{
    main_cat mcobj = new main_cat();
    List<main_cat> mclist = new List<main_cat>();
    mclist = mcobj.get_mcatlist();

    populatetree(mclist);
}

public void populatetree(List<main_cat> mytnode)
{
    TreeNode parentnode = null;
    foreach (main_cat mc in mytnode)
    {
        parentnode = new TreeNode(mc.Cname, mc.Cid.ToString());
        foreach (sub_cat sc in mc.scl)
        {
            TreeNode cnode = new TreeNode(sc.PRODUCT, sc.SID.ToString());
            parentnode.ChildNodes.Add(cnode);
        }
        parentnode.Collapse();
        my_tv.Nodes.Add(parentnode);
    }
}

public void my_tv_SelectedNodeChanged(object sender, EventArgs e)
{
    TreeView tv = sender as TreeView;
    //TreeView tv = new TreeView();
    var selectedN = tv.SelectedNode;

    if (selectedN.Parent != null)
    {
        var id = tv.SelectedNode.Value;
        var name = tv.SelectedNode.Text;
        //Session["mySvar"] = id;

        ScriptManager.RegisterStartupScript(this, this.GetType(), "nething", "show("+id+")", true);
    }
    else
    {
        //Response.Redirect("test.aspx");
    }


}

} }

I need to call the function my_tv_SelectedNodeChanged(sender, e); 我需要调用函数my_tv_SelectedNodeChanged(sender,e); of usercontrol before the page_load of just4test page and i have done so.But when i run the program it says 在just4test页面的page_load之前的usercontrol控件,我这样做了。但是当我运行程序时,它说

Object reference not set to an instance of an object. 你调用的对象是空的。

What should i do? 我该怎么办?

Page_Load no, but OnInit occures before. Page_Load否,但之前发生过OnInit。 Depends on your actual problem, you can move your logic there. 根据您的实际问题,可以将逻辑移到那里。

Or call a public method of the User control before you do anything else in the Parent Page Page_Load event 或在执行父页面Page_Load事件中的任何其他操作之前,先调用User控件的公共方法。

See Page Life Cycle 参见页面生命周期

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM