用户控制动态向导步骤

时间:2014-07-09 18:57:52

标签: asp.net user-controls lifecycle wizard radiobuttonlist

我正在动态创建一个向导。向导是一个测验。该向导是一个用户控件(.ascx)。在OnInit控件上我创建步骤并动态添加它们。在每个步骤中,我都有一个包含单选按钮列表的用户控件(也是.ascx)。此用户控件是基于数据库设置创建的。一切正常。但是,我希望用户能够返回并编辑他们的测验,我似乎无法加载已保存的答案。我计划做的是创建一个BindAnswer方法,该方法从数据库中检索答案,并在usercontrol中设置单选按钮列表选择项以反映答案。这个BindAnswer方法从数据库获取数据,并在其后面的代码中正确设置用户控件。但是,它没有渲染到屏幕上...我假设因为我没有在生命周期的正确步骤中这样做。

尝试1:

public override void BindAnswer()
{
    IEnumerable<QuestionChoice> questionChoices;
    using (var questionChoiceService = new QuestionChoiceService())
    {
        questionChoices = questionChoiceService.GetQuestionChoicesByTestAndQuestion(Convert.ToInt32(Session["TestID"]), Question.ID);
    }
    if (questionChoices.Any())
    {
        foreach (var questionChoice in questionChoices)
        {
            if (RadioButtonList.Items.FindByValue(questionChoice.QuestionValueID.ToString()) != null)
            {
                RadioButtonList.Items.FindByValue(questionChoice.QuestionValueID.ToString()).Selected = true;
            }
        }
    }
}

我称之为:

QuizQuestionControlBase questionControl = null;
questionControl = (QuizQuestionControlBase)Page.LoadControl("~/UserControls/QuizQuestionRadioButton.ascx"); 
questionControl.BindData(pageId, question.ID);
questionControl.BindAnswer();     

var step = new WizardStep();
var userControl = (Control)questionControl;
step.Controls.Add(userControl); 

step.Title = String.Format("Step {0}", QuizWizard.WizardSteps.Count + 1);
QuizWizard.WizardSteps.Add(step);

此时我可以单步执行代码并查看是否选中了正确的单选按钮。

尝试2,而不是单独的BindAnswer方法,我只是在RadioButtonList.OnDataBound事件上设置单选按钮状态,但结果相同。它似乎在代码中检查,但不会呈现在屏幕上。

1 个答案:

答案 0 :(得分:0)

好的,找到了答案。我需要在托管向导的页面的OnLoad中绑定答案。