Is it possible to call a method defined in AnotherPage.aspx.cs?

  • Thread starter Thread starter gnewsgroup
  • Start date Start date
G

gnewsgroup

I know that we can re-use/share code by placing the code in App_Code.

But, is it possible for MyPage.aspx.cs to call a method defined in
AnotherPage.aspx.cs?

Suppose, in AnotherPage.aspx.cs, we define a method which binds a
DropDownList to a database table. Let's call the method
BindDropDownList().

In MyPage.aspx, we are gonna use the same DropDownList. Is it
possible, in MyPage.aspx.cs, to simply instantiate AnotherPage and
call BindDropDownList()? Something like

// This is MyPage.aspx.cs
AnotherPage anotherPage = new AnotherPage();
anotherPage.BindDropDownList();

Does this sound whimsical?

I guess the answer is Nope, and we better write a generick-ish
BindDropDownList and stick it in a class under App_Code, right?
 
Just use public properties...

I've tried out your idea, and it was successful. That's great, but,
what about event-raising and event-consuming amongst user controls?

Say, I want user control A to respond to a click event of user control
B. Public properties won't do the trick, right?
 

Fantastic. I did write a user control which has a GridView. This
GridView gets populated with customer names retrieved from the
database. The customer names in the GridView are made to be
LinkButtons (in template fields). When such a LinkButton'ed name is
clicked, I want to send the name as a string to the parent control.

Let's call this user control SearchCustomers.ascx.

I followed the example you gave in the link above, and successfully
made the whole thing happen, which kinda excited me. Thank you.

But, I do not want to show SearchCustomers user control in the parent
page until a button is clicked in the parent page.

I have written a Visible property in SearchCustomers.ascx.cs, like so:

private bool visible;

protected void Page_Load(object sender, EventArgs e)
{
if (this.visible)
{
Panel1.Visible = true; // Pane1 holds the GridView.
}
else
{
Panel1.Visible = false;
}
}

public bool Visible
{
get
{
return this.visible;
}
set
{
this.visible = value;
}
}

In ParentPage.aspx's Page_Load, if I say

SearchCustomers1.Visible = true;

This control does show up nicely, but if I attempt to set the Visible
property in the button click event handler like so:

protected void btnSearchCustomers_Click(object s, EventArgs e)
{
SearchCustomers1.Visible = true;
}

The SearchCustomers1 user control does not show up. I kinda suspect
that it is because it has passed the Page_Load event, so the control
cannot be rendered. In any case, how do I show/hide a user control
dynamically? Somehow, I guess this user control has to be recreated /
reloaded, but what do I need to do?

Thank you again if you could share your wisdom.
 
The SearchCustomers1 user control does not show up. I kinda suspect
that it is because it has passed the Page_Load event, so the control
cannot be rendered. In any case, how do I show/hide a user control
dynamically? Somehow, I guess this user control has to be recreated /
reloaded, but what do I need to do?

I suspsect you're right.

It's a little difficult to tell without the rest of the app around the above
code, but I'd start by setting a breakpoint at the beginning line of each
method, and watching the Visible property. Remember that when you set a
control's Visible property to false server-side, it doesn't hide the
control - it actually doesn't render it at all, so it never gets streamed
down to the browser...
 
I suspsect you're right.

It's a little difficult to tell without the rest of the app around the above
code, but I'd start by setting a breakpoint at the beginning line of each
method, and watching the Visible property. Remember that when you set a
control's Visible property to false server-side, it doesn't hide the
control - it actually doesn't render it at all, so it never gets streamed
down to the browser...

Thank you. I only recently realized that setting Visible to false
server-side will cause the server not to render it.

Well, the trick is to put SearchCustomser1 on a Panel, and then show/
hide the panel instead.
 
Back
Top