object reference-error with programmatically loading user control

  • Thread starter Thread starter Martine
  • Start date Start date
M

Martine

Hi there!

I have a problem with programmatically adding user controls to my
mobile webforms. If I load my usercontrol programmatically (in the
Page_Load), the object is instantiated, I have access to the methods
and properties from the Page_Load, no problem there. But as soon as I
want access to the user control from another procedure on the same
page, I get the next error message:

"Object reference not set to an instance of an object."

When I declaratively add the user control to my page, everything's ok,
I have access to the user control from the other procedure. In this
particular case, declaratively adding the user control is ok, but I
would really like to know what I am doing wrong in the first case.

Code is below. The last line of code, in Command_Login_Click is
causing the error. The exact same line works fine in Page_Load. Also,
it works fine in the Page_Load and Command_Login_Click when the
control is declaratively added.

Any help would be much appreciated!
seeyoubye, Martine.
---------------------------
CODE IN LOGIN.ASPX.CS:

protected tank.user newUser;

private void Page_Load(object sender, System.EventArgs e)
{
Control newUser = LoadControl("user.ascx");
Page.Controls.Add(newUser);
}

public void Command_Login_Click(object sender, System.EventArgs e)
{
testlabel.Text = ((user)newUser).Function.ToString();
}

CODE IN LOGIN.ASPX:

<%@ Reference Control="user.ascx" %>

CODE IN USER.ASCX.CS:

public abstract class user : System.Web.UI.UserControl
{
public String Function
{
get
{
return "test";
}
set
{
Session["User_Function"] = value;
}
}
}
 
Martine,

Something seems wrong here:

protected tank.user newUser;

private void Page_Load(object sender, System.EventArgs e)
{
Control newUser = LoadControl("user.ascx");
Page.Controls.Add(newUser);
}

You declare newUser as a protected object of type tank.user, this seems
right. But then in the Page_Load you declare newUser as an object of type
Control where you then assign it a reference to the object returned from
LoadControl. In this case the newUser object is now just a local reference
variable in the Page_Load method. So your reference in the Login method
will have a null object reference because you never assigned an object to
the protected reference variable. Make sense?

So what I would do is change your code to this:

protected tank.user newUser;

private void Page_Load(object sender, System.EventArgs e)
{
newUser = LoadControl("user.ascx");
Page.Controls.Add(newUser);
}

See if that works,

Jay Warmack, MCAD
IT Consultant
 
Back
Top