次のコードがあります。私は動的に各ステップのコントロールをロードするユーザーコントロールを読み込むインターフェイスのウィザードタイプを作成しようとしています。各ステップにはイベントを発生させるボタンがあります。親ページは、ウィザードで次のコントロールを読み込むことになっています。何が起きているのは、同じコントロールが2回連続してレンダリングされているため、ボタンを2回クリックすることです。ウィザードに動的にロードされたコントロール
コードを見るには別の目が必要です。
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();
}
}
** EDIT ** 私はそれらのそれぞれは、前負荷を有する扱う、その後、私はこのようにそれをやっている理由は、宣言のページへのコントロールのすべてを追加することを避けるためであることを追加する必要があります彼らはロードする必要があります。
これらのイベントは使用できません。ビューステートが逆シリアル化される前にそれらは起動します。私はその時点でどんなコントロールを扱っているのか分かりません。 – Darthg8r
また、使用されたプレースホルダもまだ初期化されていません。 – Darthg8r
私もInitCompleteを使ってみました。私はビューステートとプレースホルダーを持っていますが、それでもハンドルを取ることができない振る舞いを持っています。ボタンをクリックすると、ステップ2が表示され、ボタンをクリックすると、ステップ1が表示されます。ボタンをクリックすると、ステップ3が表示されます。ステップ1をクリックします。ステップ4をクリックします。 – Darthg8r