wiring up html attribute declared event handlers

  • Thread starter Thread starter Oisin Grehan
  • Start date Start date
O

Oisin Grehan

Hi,


I have a UserControl derived class:

<ns:votingbutton runat="server" id="btn1" onclick="votingbuttonclick" />

My question is, what code do I need in place in the codebehind for this to
be wired up? All the examples I've seen wire up the event programatically,
thus making this declarative attribute irrelevant. e.g.

btn1.click += new EventHandler(this.votingbuttonclick);

I've been looking at reflection and the control's Attribute collection, but
this looks awfully messy? I've tried using reflector to reverse engineer how
the stock webcontrols do it, but I just can't see it. I figure an attribute
hint is needed on an onclick property perhaps, but I can't find anything
that'll do the job?

Any hints?

- Oisin
 
Hi Natty,

You misunderstand or misread my question. If you read my first post
correctly, you'll see that I'm referring to a UserControl derived control.
It is a server-side user-defined .ascx control, declared in an aspx page
like so:

<ns:mycontrol runat="server" onclick="myhandler" id="myctrl1"/>

much like the vanilla ASP control:

<asp:linkbutton runat="server" onclick="clickhandler" text="text"
id="lnkbtn1"/>

I want to know how to tie up the EventHandler delegate to a method called
"myhandler" in a page containing my custom control _without_ having to
programmatically do it via:

myctrl1.click += new EventHandler(myhandler);

When you add a linkbutton, you do not have to do it when you declare it via
the "onclick" attribute.

This has _nothing_ to do with client side script or postbacks at all.

- Oisin
 
Hi Natty,


You still don't get it. I _know_ a delegate is needed. It can't work without
it. Please read my post again. I'll try to make it really simple for you, as
perhaps English is not your first language.

Look at this declaration for an asp:linkbutton

<asp:linkbutton runat="server" onclick="myhandler" id="btn1" />
^^^^^^^^^^^^^^^^^^^

The sgml attribute "onclick" is specifying a method to handle the click
event. If you check out the codebehind for this page, you'll see that there
is NO code to tie the delegate to the eventhandler. It just works. It is
added at run-time, not compile-time. The only thing the IDE will add is a
variable reference, e.g. "protected System.Web.UI.WebControls.LinkButton
btn1;".

Think about it for a second. If I added:

btn1.click += new EventHandler(this.myhandler)

to my codebehind page, why would I need 'onclick="myhandler"' on the
declaration? Yes, that's right -- I wouldn't need it. Understand now? I was
asking if anyone knew the [Attribute] or suitable reflection code to use to
automatically wireup sgml attribute eventhandlers.

Agh!! :-)

- Oisin
 
Declarative Syntax for Event Wiring
ASP.NET pages provide a declarative syntax for wiring server-side event
handlers on the control's tag:

<asp:Button id="button1" OnClick="button1_Click" Text="Submit"
runat="server" />

This syntax provides an intuitive model for page developers because it
is similar to the syntax for binding a client-side event handler on an
HTML tag (onmouse­over="client-side script function name").

When the page parser parses the .aspx file (as we described in "From
Text to Controls" in Chapter 2), it transforms the declarative syntax
into code that binds an event handler to an event via an event delegate
instance:

button1.Click += new EventHandler(this.button1_Click);


Natty Gur, CTO
Dao2Com Ltd.
28th Baruch Hirsch st. Bnei-Brak
Israel , 51114

Phone Numbers:
Office: +972-(0)3-5786668
Fax: +972-(0)3-5703475
Mobile: +972-(0)58-888377

Know the overall picture
 
Back
Top