Currently i am trying to get my head round .net 2.0 / ASP.net 2.0, which is indeed an interesting journey. Overall, also I have to express my admiration to what Microsoft has accomplished with .net 1.1, continuing pretty much the right path (imho) with .net 2.0 (I used to be a huge fan of Java, and had no sympathies for MS pre-.net)
While trying to customize the CreateUserWizard control in Terms of appearance and steps, some confusion came up. Not in general a fan of tiny things that generate themselves to some big magic balloon noone can look into/debug and grasp why things are rendered and why not.
To make things short, whenever i added a CompleteWizardStep
<wizardsteps>
<asp:createuserwizardstep>
</asp:createuserwizardstep>
<asp:completewizardstep>
</asp:completewizardstep>
<contenttemplate></contenttemplate>
</wizardsteps>
ASP.net 2.0 would still render my complete step and then additionally the default complete step. Anyway i was wondering how asp.net should know i intend to REPLACE the default complete step and not add my own.
After browsing through loads of (repeating) documentation and samples, i got suspicious that your step to overwrite the default one, it has to be called exactly like the default step, in my case "CompleteWizardStep1" which i found a bit strange and/or weird. But it's the first version of the control after all ;-)
Just in case somebody has a similar issue.
Happy coding
Denis