【发布时间】: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