다음 코드가 있습니다. 각 단계에 대한 컨트롤을 동적으로로드하는 사용자 정의 컨트롤을 동적으로로드하는 마법사 유형의 인터페이스를 만들려고합니다. 각 단계에는 이벤트를 발생시키는 버튼이 있습니다. 상위 페이지는 마법사의 다음 컨트롤을로드해야합니다. 동일한 컨트롤이 두 번 연속으로 렌더링되어 버튼을 두 번 클릭하게됩니다.마법사에서 동적으로로드 된 컨트롤
코드를 보려면 눈이 필요합니다.
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();
}
}
** 수정 ** 은 내가 이런 식으로하고 있어요 이유는 선언적으로 그들 각각의 전에로드를 갖는 다음 페이지로 모든 컨트롤을 추가 처리하는 것을 피하기 것을 추가해야 그들은로드해야합니다.
이러한 이벤트는 사용할 수 없습니다. 그들은 viewstate가 deserialized되기 전에 발생합니다. 나는 내가 다루고있는 그 시점에서 어떤 통제인지 모른다. – Darthg8r
또한 사용 된 자리 표시자가 아직 초기화되지 않았습니다. – Darthg8r
InitComplete를 사용해 보았습니다. 내가 viewstate 및 자리 표시자를 가지고 있지만, 여전히 핸들을 얻을 수없는 동작이 있습니다. 버튼을 클릭하고, 2 단계, 1 단계, 1 단계, 3 단계, 1 단계, 4 단계를 차례로 클릭하십시오. – Darthg8r