I haven't stepped through this code and I don't have any walkthroughs / test pages for this, but looking at the code of PasswordRecoveryAdapter.cs, I see this:
else if ((_state == State.Question) || (_state == State.AnswerLookupError))
{
if ((passwordRecovery.QuestionTemplate != null) && (passwordRecovery.QuestionTemplateContainer != null))
{
foreach (Control c in passwordRecovery.QuestionTemplateContainer.Controls)
{
c.RenderControl(writer);
}
}
else
{
WriteTitlePanel(writer, passwordRecovery);
WriteInstructionPanel(writer, passwordRecovery);
WriteHelpPanel(writer, passwordRecovery);
WriteUserPanel(writer, passwordRecovery);
WriteQuestionPanel(writer, passwordRecovery);
WriteAnswerPanel(writer, passwordRecovery);
if (_state == State.AnswerLookupError)
{
WriteFailurePanel(writer, passwordRecovery);
}
WriteSubmitPanel(writer, passwordRecovery);
}
}
That code seems to (on paper, at least) display the template control OR display each of the question/answer fields. Does the code above not run when you step through, or does it not render what it is intended to render?
If someone wants to add some WalkThru pages for the membership controls and add them as a patch to the CodePlex project, it would be very useful (especially if there could be a mock implementation of the underlying database!).