我正在动态创建一个向导。向导是一个测验。该向导是一个用户控件(.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事件上设置单选按钮状态,但结果相同。它似乎在代码中检查,但不会呈现在屏幕上。
答案 0 :(得分:0)