C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Wizardコントロールの動的生成について


(過去ログ 19 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■8076 / inTopicNo.1)  Wizardコントロールの動的生成について
  
□投稿者/ ゴゴ (1回)-(2007/09/21(Fri) 23:07:19)

分類:[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をいろいろと探ってみたのですが、このあたりに関してうまく情報を
見つけられませんでしたので投稿いたします。

よろしくお願いいたします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -