2014-07-09 50 views
0

我正在動態創建嚮導。該向導是一個測驗。該向導是一個用戶控件(.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

好的,找到答案。我需要在承載嚮導的頁面的OnLoad中綁定答案。