[quoted text, click to view] On Sun, 07 Aug 2005 16:17:35 +0000, Wylbur via DotNetMonster.com wrote:
> Hello to all of you geniuses,
>
> I'm having a problem trying to get an Init handler to fire for a Placeholder
> control
> at the initialization phase. I’ve posted this problem to 3 other ASP.NET
> forums,
> and noone wants to touch it.
>
> I tried to attach a literal control to a placeholder:
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
>
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */
> void plc_hldr_Control_Init (object sender, EventArgs e)
> {
> int ndx = 1;
>
> // Dyn_Control_Placeholder.Controls.Add
> this.Controls.Add
> ( new LiteralControl ("<br>added 1 on init<br>") );
> }
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */
> void Page_Init (object sender, EventArgs e)
> {
> int ndx = 2;
>
> // Add a event Handler for 'Init'.
>
> Dyn_Control_Placeholder.Init
> += new System.EventHandler (plc_hldr_Control_Init);
> }
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ *
>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
>
>
>
> ... and nothing happened: The Init handler never fired.
>
> I put my code in the debugger, set a breakpoint on the Init handler
> (plc_hldr_Control_Init), and the breakpoint was never reached.
>
>
>
> I've read the SDK docs, and I thought I had it figured out:
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> .NET Framework Class Library
>
> Control.Init Event [C#]
>
> C#
> public event EventHandler Init;
>
> Event Data
> The event handler receives an argument of type EventArgs.
>
> Remarks
> Server controls should perform any initialization steps that are required
> to create and set up an instance. You cannot use view-state information
> within this event; it is not populated yet. You should not access another
> server control during this event, regardless of whether it is a child or
> parent to this control. Other server controls are not certain to be created
> and ready for access.
>
> Example
> [C#] The following example assigns a custom event handler, Control_Init,
> to the Init event of a control, myControl, when the Page_Init method is
> called on the page that contains the control.
>
> void Page_Init(object sender,EventArgs e)
> {
> // Add a event Handler for 'Init'.
> myControl.Init += new System.EventHandler(Control_Init);
> }
>
> void Control_Init(object sender,EventArgs e)
> {
> Response.Write("The ID of the object initially : " + myControl.ID);
> // Change the ID property.
> myControl.ID="TestControl";
> Response.Write("<br>The changed ID : " + myControl.ID);
> }
>
> © 2001-2002 Microsoft Corporation. All rights reserved.
>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
>
>
>
> One thing I don't understand is: Where did "myControl" come from in the
> given example?
>
>
>
> Just for laughs, I moved the Init functionality into the Page_Init handler:
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */
> public void plc_hldr_Control_Init (object sender, EventArgs e)
> {
> int ndx = 1;
>
> // Dyn_Control_Placeholder.Controls.Add
> this.Controls.Add
> ( new LiteralControl("<br>added 1 on init<br>") );
> }
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */
> public void Page_Init (object sender, EventArgs e)
> {
> int ndx = 2;
>
> // Add a event Handler for 'Init'.
>
> // Dyn_Control_Placeholder.Init
> // += new System.EventHandler (plc_hldr_Control_Init);
>
> // Moving the Init functionality to the Page_Init handler
> Dyn_Control_Placeholder.Controls.Add
> ( new LiteralControl("<br>****** added 1 on init ********<br><br>") );
> }
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
>
>
>
> ... and it worked as expected.
> ... so the problem has nothing to do with the LiteralControl being attached.
>
>
> I'm hoping that someone smarter than me can clue me in on this
> - I would be most grateful.
>
>
>
> My complete code is as follows:
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
> <[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>-<[+]>
>
> <%@ Page Language="C#" AutoEventWireup="True" %>
>
> <html>
> <head>
>
> <script runat="server">
>
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */
>
> /* -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
> */
> // protected class sys_obj_class
> public class sys_obj_class
> {
> private Page this_page01;
> public Page Get_this_page01
> { get { return this_page01; } }
>
> private PlaceHolder Obj_Dyn_Ctrl_Placeholder;
> public PlaceHolder Get_Obj_Dyn_Ctrl_Placeholder
> { get { return Obj_Dyn_Ctrl_Placeholder; } }
>
> private Label Obj_Dyn_Label01;
> public Label Get_Obj_Dyn_Label01
> { get { return Obj_Dyn_Label01; } }
>
>
> public sys_obj_class
> (PlaceHolder Dyn_Ctrl_Placeholder, Label Dyn_Label)
> {
> this_page01 = Dyn_Ctrl_Placeholder.Page;
> Obj_Dyn_Ctrl_Placeholder = Dyn_Ctrl_Placeholder;
> Obj_Dyn_Label01 = Dyn_Label;
> }
> }
>
> /* ------------------------------------------------------------------ */
> /* ------------------------------------------------------------------ */