我有下面的代碼。我試圖創建一個嚮導類型的接口,動態加載用戶控件,動態加載每個步驟的控件。每一步都有一個按鈕來引發一個事件。父頁面應該加載嚮導中的下一個控件。發生的事情是同一個控件連續呈現兩次,使我點擊按鈕兩次。嚮導中的動態加載控件
我需要另一組眼睛來看代碼。
public partial class CreateTriviaGame : BasePage
{
private TriviaGame _game;
private int _step = 1;
protected void Page_PreLoad(object sender, EventArgs e)
{
LoadStepControl();
}
private void LoadStepControl()
{
BaseTriviaGameControl ctrl = null;
switch (_step)
{
case 1:
ctrl = (BaseTriviaGameControl)LoadControl("AddEditGame.ascx");
break;
case 2:
ctrl = (BaseTriviaGameControl)LoadControl("CrudQuestions.ascx");
ctrl.TriviaGame = _game;
break;
case 3:
ctrl = (BaseTriviaGameControl)LoadControl("AddEditPaymentInfo.ascx");
ctrl.TriviaGame = _game;
break;
case 4:
ctrl = (BaseTriviaGameControl)LoadControl("ConfirmPayment.ascx");
ctrl.TriviaGame = _game;
break;
case 5:
ctrl = (BaseTriviaGameControl)LoadControl("ThankForPayment.ascx");
ctrl.TriviaGame = _game;
break;
}
ctrl.EntitySaved += new EventHandler(ctrl_EntitySaved);
holder1.Controls.Add(ctrl);
}
protected void ctrl_EntitySaved(object sender, EventArgs e)
{
_game = ((BaseTriviaGameControl)sender).TriviaGame;
_step++;
holder1.Controls.Clear();
LoadStepControl();
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
_game = (TriviaGame)ViewState["Game"];
_step = (int)ViewState["Step"];
}
protected override object SaveViewState()
{
ViewState["Game"] = _game;
ViewState["Step"] = _step;
return base.SaveViewState();
}
}
**編輯** 我要補充一點,我做它像這種情況的原因是避免以聲明的所有控件添加到頁面中,然後對付他們每個人的面前裝他們需要加載。
您不能使用這些事件。它們在視圖狀態被反序列化之前觸發。我不知道我在處理什麼控制。 – Darthg8r 2009-08-22 04:31:48
此外,所用的佔位符還未被初始化。 – Darthg8r 2009-08-22 04:33:01
我也嘗試過使用InitComplete。雖然我有viewstate和一個佔位符,但它仍然有一個我無法處理的行爲。點擊按鈕,第2步顯示,點擊按鈕,第1步顯示,點擊按鈕,第3步顯示,點擊,第1步,點擊第4步。 – Darthg8r 2009-08-22 04:43:17