handling events in usercontrols

J

John Hopper

Hello,

I have a button in an aspx page. When that button is clicked I want to
change a css class in a usercontrol in that page. However the button's click
event is not raised until after the usercontrol loads, and there is no
postback after the click event. How can I do this?

Thank you,
 
N

Nathan Sokalski

Postback events (such as the Click event) never occur until after the Load
event. What code are you using to change the CSS class, and what event is
that code in?
 
F

foton

In the aspx page, in the button_click event handler, I set the cssClass of a
button in a usercontrol contained by the aspx page. Since the event handler
fires after the usercontrol is loaded, that doesn't work. How else to
approach this?

Thanks,
 
F

foton

I can't make the change client-side because the aspx page has a master page
and asp mangles the names of controls to keep them unique. So I've tried to
make the change in the code-behind of the aspx page or the master page but
the button_click event is always handled last, after all of the parts of the
page have loaded.

Thanks!
 
E

Evan Freeman

One it doesn't mangle the name per say. You could easily expose the
generated name to your client side script.

<asp:Button ID="MyControl" runat="server" Text="Foo"/>

var control = <%MyControl.ClientId %>;
document.getElementById(control).cssCLass = "CoolBeans";

Second why would you want to change the style before the elements are
loaded, you'd just spit out errors, the dom needs to be ready befor eyou
start manipulation of tags. Anyhow the above should let you do what you need
client side. It's not perfect I typed it from memory.

Enjoy!
 
F

foton

I'm sorry that my question isn't clear. I have an aspx page which uses a
master page. In that aspx page I have 9 instances of the same usercontrol. I
have other pages with different numbers of this usercontrol. Each usercontrol
has a button named "btnEdit". When a 'preview" button is clicked in the aspx
page I need to hide the btnEdit buttons. Each will have a unique id thanks to
asp's efforts to keep them unique. The "preview" button's click event fires
in the aspx page's codebehind AFTER the 9 usercontrols and their edit buttons
have loaded. So what would be a way to change the cssClass of each of the
usercontrol's btnEdit buttons as a result of the "preview" button being
clicked in the containing aspx page?

Thank you,
 
E

Evan Freeman

Are these controls dynamically created?

Anyhow the method I told you should work, just expose all the generated id's
as an array, and then loop through. I mean you are specifying an ID of some
kind in the markup, if not then you need to rethink what your doing.

Another way to do it would be to expose an event handler in your control and
make them all listen to the click event of the preview button, then do your
CssChanging from with in that.
 
F

foton

Evan,

Thanks for your advice! How do I make the usercontrols event handler listen
for the containing page's button click event? Would it be something like ...
handles me.parent.page.findControl("btnPreview")_click() or something like
that?
 
E

Evan Freeman

Button1.Click += new
System.EventHandler(MyWierdUserControl1.myEventHandler);Button1.Click += new
System.EventHandler(MyWierdUserControl2.myEventHandler);Button1.Click += new
System.EventHandler(MyWierdUserControl3.myEventHandler);
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top