【问题标题】:User controls on dynamic wizard steps动态向导步骤的用户控件
【发布时间】:2014-08-30 22:52:55
【问题描述】:

我正在动态创建一个向导。向导是一个测验。该向导是一个用户控件 (.ascx)。在控件的 OnInit 上,我创建步骤并动态添加它们。在每个步骤中,我都有一个包含单选按钮列表的用户控件(也是 .ascx)。此用户控件是根据数据库设置创建的。这一切都很好。但是,我希望用户能够返回并编辑他们的测验,我似乎无法加载保存的答案。我计划做的是创建一个 BindAnswer 方法,该方法从数据库中检索答案,并在用户控件中设置单选按钮列表选定项目以反映答案。此 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 事件上设置单选按钮状态,但结果相同。它似乎签入了代码,但没有呈现到屏幕上。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2014-06-15
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多