我有下面的代码。我试图创建一个向导类型的接口,动态加载用户控件,动态加载每个步骤的控件。每一步都有一个按钮来引发一个事件。父页面应该加载向导中的下一个控件。发生的事情是同一个控件连续呈现两次,使我点击按钮两次。向导中的动态加载控件
我需要另一组眼睛来看代码。
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