Custom Control Properties not initializing properly
<p>The First - LblTextBox:
 A label and textbox that have a LabelText field that can be set to change the label text</p>

<p>The Second - LoginCtl:
 A login control that has two instances of LblTextBox for user name, password and a submit button</p>

<p>I want to control the tag rendering of these controls for formatting so I am not overriding CreateChildControls() to get the job done.</p>

<p>My issue is that the controls are rendered but none of the OnInit() code in either controls takes hold (blank labels, css styles not applied, etc..). </p>

<p>Any direction would be great!</p>

<pre><code>public class LblTextBox : CompositeControl
{
    public string LabelText { get; set; }
    public string Text { get; set; }

    TextBox input;
    Label label;
    RequiredFieldValidator evalReqField;

    public LblTextBox()
    {
        label = new Label();
        input = new TextBox();
        evalReqField = new RequiredFieldValidator();
    }

    protected override void  OnInit(EventArgs e)
    {
        label.ID = "lblTextBox";
        label.Text = string.Format("{0}:", LabelText);

        input.ID = "tbInput";

        evalReqField.ID = "evalInput";
        evalReqField.ControlToValidate = input.ID;
        evalReqField.ErrorMessage = "(Required)";
        evalReqField.Display = ValidatorDisplay.Dynamic;
    }

    protected override void RenderChildren(HtmlTextWriter writer)
    {
        writer.RenderBeginTag(HtmlTextWriterTag.Div);
        label.RenderControl(writer);
        input.RenderControl(writer);
        evalReqField.RenderControl(writer);
        writer.RenderEndTag();
    }
}

public class LoginCtl : CompositeControl
{   
    public string UserName 
    { 
        get
        {
            return (ltbUser != null) ? ltbUser.Text : string.Empty;
        }
        set
        {
            if (ltbUser != null)
                ltbUser.Text = value; 
        }
    }

    public string Password 
    {
        get
        {
            return (ltbPass != null) ? ltbPass.Text : string.Empty;
        }
        set
        {
            if (ltbPass != null)
                ltbPass.Text = value;
        }
    }

    private LblTextBox ltbUser;
    private LblTextBox ltbPass;
    private Button btnSubmit;

    public LoginCtl()
    {
        ltbUser = new LblTextBox();
        ltbPass = new LblTextBox();
        btnSubmit = new Button();
    }

    protected override void  OnInit(EventArgs e)
    {
        ltbUser.LabelText = "User Name";
        ltbPass.LabelText = "Password";
        btnSubmit.Text = "Submit";
        btnSubmit.CssClass = "Submit";
    }

    protected override void RenderChildren(HtmlTextWriter writer)
    {
        writer.AddAttribute(HtmlTextWriterAttribute.Class, "LoginCtlDiv");
        writer.RenderBeginTag(HtmlTextWriterTag.Div);
        ltbUser.RenderControl(writer);
        ltbPass.RenderControl(writer);
        btnSubmit.RenderControl(writer);
        writer.RenderEndTag();
    }
}
</code></pre>
