|
分類:[ASP.NET (C#)]
初めて質問させていただきます。ゴゴと申します。
環境:Visual Studio 2005, ASP.NET(C#)
Wizardコントロールを動的に生成させ、画面制御を行うことを考えています。
動的に生成させるのは、ステップ数が可変であるという理由からです。
最初はページロード毎にコントロールを生成するように組んでみました。
確かに想定どおりの動きをしてくれるのですが、毎回データを読み込むのもどうかと
考えて、非ポストバック時にコントロールを生成しそれを持ちまわろうと思い
以下のコードにしました。
<<=== wiztest.aspx(抜粋)
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="ph1" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
==========>>
<<=== wiztest.aspx.cs
public partial class wiztest : System.Web.UI.Page
{
Wizard wiz;
protected void Page_PreInit(object sender, EventArgs e)
{
//ポストバック判定
if (!IsPostBack)
{
//非ポストバックの場合
//Wizardコントロール生成
wiz = new Wizard();
wiz.DisplaySideBar = false;
//ステップ数を取得
//データベースアクセスあり
//int count = GetStepCount();
int count = 5; //実際にはGetStepCount()で取得した値
//ステップ数分WizardStepを生成し、Wizardコントロールに追加
for (int i = 0; i < count; i++)
{
WizardStep ws = new WizardStep();
ws.ID = "ws" + i.ToString();
Label lbl = new Label();
lbl.Text = "Wizardコントロール動的生成" + i.ToString();
ws.Controls.Add(lbl);
wiz.WizardSteps.Add(ws);
}
//セッションへ保存(ここがまずい?)
Session["wiz"] = wiz;
}
else
{
//ポストバックの場合
//セッションから復元(ここがまずい?)
wiz = (Wizard)Session["wiz"];
}
//プレースホルダーに追加
ph1.Controls.Add(wiz);
}
}
=======>>
これだと、一見うまく動いているように見えるのですが
1. どのステップで「戻る」ボタンを押しても最初のページへ戻ってしまう(きちんと一つ前のページに遷移させたい)
2. 「F5」や「最新の情報に更新」を実行されると制御できない(ロード毎に生成する方法であれば問題ない)
という問題に直面しています。
やはりセッションにWizardコントロールを入れることがまずいのでしょうか。
ページロード毎にDBアクセスさせることは避けたいと思っているのですが、
何か代替できる方法があればご教示ください。
Webをいろいろと探ってみたのですが、このあたりに関してうまく情報を
見つけられませんでしたので投稿いたします。
よろしくお願いいたします。
|